Playlist Along
==============
|Status| |PyPI| |Python Version| |License|
|Read the Docs| |Tests| |Codecov|
|Black|
.. |Status| image:: https://raster.shields.io/badge/Status-beta-26972D
:target: https://raster.shields.io/badge/Status-beta-26972D
:alt: Project Status
.. |PyPI| image:: https://img.shields.io/pypi/v/playlist-along.svg
:target: https://pypi.org/project/playlist-along/
:alt: PyPI
.. |Python Version| image:: https://img.shields.io/pypi/pyversions/playlist-along
:target: https://pypi.org/project/playlist-along
:alt: Python Version
.. |License| image:: https://img.shields.io/pypi/l/playlist-along.svg
:target: https://opensource.org/licenses/MIT
:alt: License
.. |Read the Docs| image:: https://img.shields.io/readthedocs/playlist-along/latest.svg?label=Read%20the%20Docs
:target: https://playlist-along.readthedocs.io/
:alt: Read the documentation at https://playlist-along.readthedocs.io/
.. |Tests| image:: https://github.com/hotenov/playlist-along/workflows/Tests/badge.svg
:target: https://github.com/hotenov/playlist-along/actions?workflow=Tests
:alt: Tests
.. |Codecov| image:: https://codecov.io/gh/hotenov/playlist-along/branch/main/graph/badge.svg
:target: https://codecov.io/gh/hotenov/playlist-along
:alt: Codecov
.. |Black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
:alt: Black
🧐 About
---------
Have you ever wanted to take your favorite offline playlist along?
— *I have.*
This script makes it easier to do that.
It converts your playlist with absolute paths
to playlist with relative paths,
and copies audio files to one folder with converted playlist.
The only thing that remains to be done is to move this folder
to your Android smartphone and open the playlist
(or let a player to discover media for you).
Although, there is only one conversion way
"Desktop `AIMP`_ -> `VLC for Android`_" for now,
but who knows what the future holds for us?
🚀 Features
------------
* Conversion from **AIMP** *(desktop)* .m3u / .m3u8 playlists
into playlists suitable for playback in **VLC for Android**
(with relative paths,
replaced square brackets ``[`` ``]`` and *hash* ``#``
in songs filenames)
* Copying songs from .m3u / .m3u8 playlists into destination folder
(after playlist conversion and only **.mp3** and **.flac** local files, for now)
* Displaying only tracks from playlist
*(without M3U tag lines / comments)*
* Displaying a full content of playlist file
* Creating a playlist from tracks of specified folder
(with relative or absolute paths)
* Injecting (appending) one playlist into another
(top or bottom)
* Creating an empty playlist file
* **TBD:** Copying and conversion paths to relative, without replacing characters
("make relative playlist")
🛠️ Requirements
----------------
* Python 3.9 and higher
Installing Python is no different than installing other apps for your OS.
Go to downloads page on `python.org <https://www.python.org/downloads/>`_.
Download the latest version for your OS or any version higher than ``3.9.2``.
Then run Python installer and follow its steps.
💻 Installation
----------------
You can install *Playlist Along* via pip_ from PyPI_:
.. code:: console
$ pip install playlist-along
I do recommend you to use `pipx`_ for any CLI Python package.
It let you install and run Python applications in isolated environments.
.. code:: console
$ python -m pip install --user pipx
$ pipx install playlist-along
$ playlist-along --version
🕹 Usage
--------
Please see the `Usage Examples <Usage_>`_ or the `Command-line Reference <Manpage_>`_ for details.
✊ Contributing
---------------
If you want to suggest a new feature or to ask questions about this project,
you can open a `new discussion`_.
Want to implement or fix something? - contributions are very welcome.
To learn more, see the `Contributor Guide`_.
📝 License
-----------
Distributed under the terms of the `MIT license`_,
*Playlist Along* is free and open source software.
🐞 Issues
----------
If you encounter any problems,
please see `project discussions`_ first
or `file an issue`_ along with a detailed description.
🙏🏻 Credits
------------
This project was generated from `@cjolowicz`_'s `Hypermodern Python Cookiecutter`_ template.
Script uses the following packages / libraries under the hood:
* `Click`_, of course (`BSD-3-Clause License <https://github.com/pallets/click/blob/main/LICENSE.rst>`_)
* `charset_normalizer <https://github.com/Ousret/charset_normalizer>`_, for auto encoding detecting of playlist files (MIT License)
* `single-source <https://github.com/rabbit72/single-source>`_, for getting project version from anywhere (MIT License)
* `natsort <https://github.com/SethMMorton/natsort>`_, to get tracks order as you see in File Explorer (MIT License)
* `mutagen <https://github.com/quodlibet/mutagen>`_, to handle audio metadata (GPL-2.0 License)
and other amazing Python packages for development and testing.
See a full list of dev dependencies in ``pyproject.toml``
`here <https://github.com/hotenov/playlist-along/blob/main/pyproject.toml#L29>`_.
.. _AIMP: https://www.aimp.ru/
.. _VLC for Android: https://play.google.com/store/apps/details?id=org.videolan.vlc&hl=en&gl=US
.. _@cjolowicz: https://github.com/cjolowicz
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _MIT license: https://opensource.org/licenses/MIT
.. _PyPI: https://pypi.org/project/playlist-along/
.. _Hypermodern Python Cookiecutter: https://github.com/cjolowicz/cookiecutter-hypermodern-python
.. _file an issue: https://github.com/hotenov/playlist-along/issues
.. _pip: https://pip.pypa.io/
.. _new discussion: https://github.com/hotenov/playlist-along/discussions/new
.. _project discussions: https://github.com/hotenov/playlist-along/discussions
.. _Click: https://github.com/pallets/click
.. _pipx: https://pipxproject.github.io/pipx/
.. github-only
.. _Contributor Guide: CONTRIBUTING.rst
.. _Usage: https://playlist-along.readthedocs.io/en/latest/usage.html
.. _Manpage: https://playlist-along.readthedocs.io/en/latest/manpage.html
Raw data
{
"_id": null,
"home_page": "https://github.com/hotenov/playlist-along",
"name": "playlist-along",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.11",
"maintainer_email": null,
"keywords": null,
"author": "Artem Hotenov",
"author_email": "qa@hotenov.com",
"download_url": "https://files.pythonhosted.org/packages/1f/9a/764595c6f1194a5d6f46336e9c5687e97cbf73315bf5d98e021df9a624de/playlist_along-2024.8.8.tar.gz",
"platform": null,
"description": "Playlist Along\n==============\n\n|Status| |PyPI| |Python Version| |License|\n\n|Read the Docs| |Tests| |Codecov|\n|Black|\n\n.. |Status| image:: https://raster.shields.io/badge/Status-beta-26972D\n :target: https://raster.shields.io/badge/Status-beta-26972D\n :alt: Project Status\n.. |PyPI| image:: https://img.shields.io/pypi/v/playlist-along.svg\n :target: https://pypi.org/project/playlist-along/\n :alt: PyPI\n.. |Python Version| image:: https://img.shields.io/pypi/pyversions/playlist-along\n :target: https://pypi.org/project/playlist-along\n :alt: Python Version\n.. |License| image:: https://img.shields.io/pypi/l/playlist-along.svg\n :target: https://opensource.org/licenses/MIT\n :alt: License\n.. |Read the Docs| image:: https://img.shields.io/readthedocs/playlist-along/latest.svg?label=Read%20the%20Docs\n :target: https://playlist-along.readthedocs.io/\n :alt: Read the documentation at https://playlist-along.readthedocs.io/\n.. |Tests| image:: https://github.com/hotenov/playlist-along/workflows/Tests/badge.svg\n :target: https://github.com/hotenov/playlist-along/actions?workflow=Tests\n :alt: Tests\n.. |Codecov| image:: https://codecov.io/gh/hotenov/playlist-along/branch/main/graph/badge.svg\n :target: https://codecov.io/gh/hotenov/playlist-along\n :alt: Codecov\n.. |Black| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :target: https://github.com/psf/black\n :alt: Black\n\n\ud83e\uddd0 About\n---------\n\nHave you ever wanted to take your favorite offline playlist along?\n\u2014 *I have.*\n\nThis script makes it easier to do that.\nIt converts your playlist with absolute paths\nto playlist with relative paths,\nand copies audio files to one folder with converted playlist.\nThe only thing that remains to be done is to move this folder\nto your Android smartphone and open the playlist\n(or let a player to discover media for you).\n\nAlthough, there is only one conversion way\n\"Desktop `AIMP`_ -> `VLC for Android`_\" for now, \nbut who knows what the future holds for us?\n\n\ud83d\ude80 Features\n------------\n\n* Conversion from **AIMP** *(desktop)* .m3u / .m3u8 playlists\n into playlists suitable for playback in **VLC for Android**\n (with relative paths,\n replaced square brackets ``[`` ``]`` and *hash* ``#`` \n in songs filenames)\n* Copying songs from .m3u / .m3u8 playlists into destination folder\n (after playlist conversion and only **.mp3** and **.flac** local files, for now)\n* Displaying only tracks from playlist\n *(without M3U tag lines / comments)*\n* Displaying a full content of playlist file\n* Creating a playlist from tracks of specified folder\n (with relative or absolute paths)\n* Injecting (appending) one playlist into another \n (top or bottom)\n* Creating an empty playlist file\n* **TBD:** Copying and conversion paths to relative, without replacing characters\n (\"make relative playlist\")\n\n\ud83d\udee0\ufe0f Requirements\n----------------\n\n* Python 3.9 and higher\n\nInstalling Python is no different than installing other apps for your OS.\nGo to downloads page on `python.org <https://www.python.org/downloads/>`_.\nDownload the latest version for your OS or any version higher than ``3.9.2``.\nThen run Python installer and follow its steps.\n\n\n\ud83d\udcbb Installation\n----------------\n\nYou can install *Playlist Along* via pip_ from PyPI_:\n\n.. code:: console\n\n $ pip install playlist-along\n\nI do recommend you to use `pipx`_ for any CLI Python package.\nIt let you install and run Python applications in isolated environments.\n\n.. code:: console\n\n $ python -m pip install --user pipx\n $ pipx install playlist-along\n $ playlist-along --version\n\n\ud83d\udd79 Usage\n--------\n\nPlease see the `Usage Examples <Usage_>`_ or the `Command-line Reference <Manpage_>`_ for details.\n\n\n\u270a Contributing\n---------------\n\nIf you want to suggest a new feature or to ask questions about this project,\nyou can open a `new discussion`_.\n\nWant to implement or fix something? - contributions are very welcome.\nTo learn more, see the `Contributor Guide`_.\n\n\n\ud83d\udcdd License\n-----------\n\nDistributed under the terms of the `MIT license`_,\n*Playlist Along* is free and open source software.\n\n\n\ud83d\udc1e Issues\n----------\n\nIf you encounter any problems,\nplease see `project discussions`_ first \nor `file an issue`_ along with a detailed description.\n\n\n\ud83d\ude4f\ud83c\udffb Credits\n------------\n\nThis project was generated from `@cjolowicz`_'s `Hypermodern Python Cookiecutter`_ template.\n\nScript uses the following packages / libraries under the hood:\n\n* `Click`_, of course (`BSD-3-Clause License <https://github.com/pallets/click/blob/main/LICENSE.rst>`_)\n* `charset_normalizer <https://github.com/Ousret/charset_normalizer>`_, for auto encoding detecting of playlist files (MIT License)\n* `single-source <https://github.com/rabbit72/single-source>`_, for getting project version from anywhere (MIT License)\n* `natsort <https://github.com/SethMMorton/natsort>`_, to get tracks order as you see in File Explorer (MIT License)\n* `mutagen <https://github.com/quodlibet/mutagen>`_, to handle audio metadata (GPL-2.0 License)\n\nand other amazing Python packages for development and testing.\n\nSee a full list of dev dependencies in ``pyproject.toml``\n`here <https://github.com/hotenov/playlist-along/blob/main/pyproject.toml#L29>`_.\n\n\n.. _AIMP: https://www.aimp.ru/\n.. _VLC for Android: https://play.google.com/store/apps/details?id=org.videolan.vlc&hl=en&gl=US\n.. _@cjolowicz: https://github.com/cjolowicz\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _MIT license: https://opensource.org/licenses/MIT\n.. _PyPI: https://pypi.org/project/playlist-along/\n.. _Hypermodern Python Cookiecutter: https://github.com/cjolowicz/cookiecutter-hypermodern-python\n.. _file an issue: https://github.com/hotenov/playlist-along/issues\n.. _pip: https://pip.pypa.io/\n.. _new discussion: https://github.com/hotenov/playlist-along/discussions/new\n.. _project discussions: https://github.com/hotenov/playlist-along/discussions\n.. _Click: https://github.com/pallets/click\n.. _pipx: https://pipxproject.github.io/pipx/\n\n.. github-only\n.. _Contributor Guide: CONTRIBUTING.rst\n.. _Usage: https://playlist-along.readthedocs.io/en/latest/usage.html\n.. _Manpage: https://playlist-along.readthedocs.io/en/latest/manpage.html\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Python CLI app for M3U playlists conversion and processing",
"version": "2024.8.8",
"project_urls": {
"Changelog": "https://github.com/hotenov/playlist-along/releases",
"Documentation": "https://playlist-along.readthedocs.io",
"Homepage": "https://github.com/hotenov/playlist-along",
"Repository": "https://github.com/hotenov/playlist-along"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2b8d9a63930ec00debfe36f3628ecf93e9e03fefb70995ff2ea9bac15568a985",
"md5": "05930c12c9c4c60855bb2898acd904e7",
"sha256": "dd5ef143010b861332f93e34889efc1079d31a02ba6203692fbb674de49e2d4f"
},
"downloads": -1,
"filename": "playlist_along-2024.8.8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "05930c12c9c4c60855bb2898acd904e7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.11",
"size": 13416,
"upload_time": "2024-08-08T15:04:46",
"upload_time_iso_8601": "2024-08-08T15:04:46.996154Z",
"url": "https://files.pythonhosted.org/packages/2b/8d/9a63930ec00debfe36f3628ecf93e9e03fefb70995ff2ea9bac15568a985/playlist_along-2024.8.8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1f9a764595c6f1194a5d6f46336e9c5687e97cbf73315bf5d98e021df9a624de",
"md5": "7504323c770b715e38cd99ed88cbf138",
"sha256": "7b0c277dd1571ca2fca5dc9da8b27c17b913472ead868f1053c06882770d009c"
},
"downloads": -1,
"filename": "playlist_along-2024.8.8.tar.gz",
"has_sig": false,
"md5_digest": "7504323c770b715e38cd99ed88cbf138",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.11",
"size": 12229,
"upload_time": "2024-08-08T15:04:51",
"upload_time_iso_8601": "2024-08-08T15:04:51.009300Z",
"url": "https://files.pythonhosted.org/packages/1f/9a/764595c6f1194a5d6f46336e9c5687e97cbf73315bf5d98e021df9a624de/playlist_along-2024.8.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-08 15:04:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hotenov",
"github_project": "playlist-along",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "playlist-along"
}