{"id":15015489,"url":"https://github.com/tutislav/neodeemer","last_synced_at":"2025-07-12T20:12:58.109Z","repository":{"id":53256003,"uuid":"501721311","full_name":"Tutislav/neodeemer","owner":"Tutislav","description":"Spotify/YouTube song downloader with option to download whole albums, playlists and also lyrics. Available on Android, Windows and Linux.","archived":false,"fork":false,"pushed_at":"2024-10-27T17:54:47.000Z","size":2986,"stargazers_count":42,"open_issues_count":5,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-12T09:18:48.549Z","etag":null,"topics":["android","downloader","kivy","kivymd","linux","lyrics","m4a","mp3","music","music-downloader","playlist","playlist-downloader","python","spotify","spotify-downloader","windows","youtube","youtube-downloader"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tutislav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-06-09T16:03:48.000Z","updated_at":"2025-01-22T22:30:10.000Z","dependencies_parsed_at":"2024-09-15T02:00:10.692Z","dependency_job_id":"501fd0e6-af48-494f-a37e-54875ff8b25c","html_url":"https://github.com/Tutislav/neodeemer","commit_stats":{"total_commits":127,"total_committers":1,"mean_commits":127.0,"dds":0.0,"last_synced_commit":"53dddc1e9f19b9ceb1b66766480e3bc76e5786aa"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/Tutislav/neodeemer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tutislav%2Fneodeemer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tutislav%2Fneodeemer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tutislav%2Fneodeemer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tutislav%2Fneodeemer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tutislav","download_url":"https://codeload.github.com/Tutislav/neodeemer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tutislav%2Fneodeemer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265047848,"owners_count":23703218,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","downloader","kivy","kivymd","linux","lyrics","m4a","mp3","music","music-downloader","playlist","playlist-downloader","python","spotify","spotify-downloader","windows","youtube","youtube-downloader"],"created_at":"2024-09-24T19:47:32.340Z","updated_at":"2025-07-12T20:12:58.061Z","avatar_url":"https://github.com/Tutislav.png","language":"Python","readme":"[\u003cimg src=\"neodeemer/data/icon.png\" alt=\"Icon\" height=\"100\" align=\"right\"\u003e](https://github.com/Tutislav/neodeemer/releases/latest)\n\n# Neodeemer\n[![Downloads](https://img.shields.io/github/downloads/Tutislav/neodeemer/total?label=Downloads)](https://github.com/Tutislav/neodeemer/releases/latest)\n[![Release](https://img.shields.io/github/v/release/Tutislav/neodeemer?label=Release)](https://github.com/Tutislav/neodeemer/releases/latest)\n[![License](https://img.shields.io/github/license/Tutislav/neodeemer?label=License)](https://github.com/Tutislav/neodeemer/blob/main/LICENSE)\n[![Softpedia](https://img.shields.io/badge/Softpedia-Certified-limegreen)](https://www.softpedia.com/get/Internet/Download-Managers/Neodeemer.shtml#status)\\\n[![Android](https://img.shields.io/badge/Android-%3E%3D%205.0-mediumseagreen?logo=android\u0026logoColor=mediumseagreen)](#installation)\n[![Windows](https://img.shields.io/badge/Windows-%3E%3D%208-deepskyblue?logo=windows\u0026logoColor=deepskyblue)](#installation)\n[![Python](https://img.shields.io/badge/Python-%3E%3D%203.8-steelblue?logo=python\u0026logoColor=steelblue)](#running-from-source)\n\nSpotify/YouTube song downloader with option to download whole albums, playlists and also lyrics.\\\nAvailable on [**Android**](#installation), [**Windows**](#installation) and [**Linux***](#running-from-source \"You must run it from source\").\n\n\u003e [!IMPORTANT]\n\u003e YouTube recently started blocking IP adresses, when you download too much videos as described in https://github.com/yt-dlp/yt-dlp/issues/3766. \\\n\u003e It looks like bans are temporary and doesn't apply to logged users in browser.\\\n\u003e So if you are downloading large playlist and download suddenly stops working , just try it later.\n\n## **[▶Download latest release◀](https://github.com/Tutislav/neodeemer/releases/latest)**\n\n## Features\n- Spotify/YouTube search - you can search by artist, album or track name\n- Play songs before you download it\n- Download single songs or whole albums\n- Download whole Spotify/YouTube playlists - saved to `.m3u` file\n- Download songs from share screen - tap share in Spotify/YouTube app on Android\n- Automatically save track name, artist name, album image and other tags to songs\n- Lyrics - embedded directly to audio files\n- Synchronized lyrics - saved to `.lrc` files\n- ~~Change audio format - `m4a` or `mp3`~~ - only m4a audio format is available right now\n- ~~Download age restricted videos~~ - not available right now\n- [Browser Extension](#browser-extension) - download music directly from YouTube video page\n\n## Screenshots\n\u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"img/neodeemer_screenshot_1_light.jpg\"\u003e\n    \u003cimg src=\"img/neodeemer_screenshot_1.jpg\" alt=\"Screenshot 1\"\u003e\n\u003c/picture\u003e\n\u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"img/neodeemer_screenshot_2_light.jpg\"\u003e\n    \u003cimg src=\"img/neodeemer_screenshot_2.jpg\" alt=\"Screenshot 2\"\u003e\n\u003c/picture\u003e\n\u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"img/neodeemer_screenshot_3_light.jpg\"\u003e\n    \u003cimg src=\"img/neodeemer_screenshot_3.jpg\" alt=\"Screenshot 3\"\u003e\n\u003c/picture\u003e\n\u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"img/neodeemer_screenshot_4_light.jpg\"\u003e\n    \u003cimg src=\"img/neodeemer_screenshot_4.jpg\" alt=\"Screenshot 4\"\u003e\n\u003c/picture\u003e\n\n## Installation\n### Android\n1. [Download neodeemer_android.apk](https://github.com/Tutislav/neodeemer/releases/latest)\n2. Open downloaded apk and install it\n\nIf it says you can't install unknown apps, just go to Settings and search Install unknown apps, then select your browser and tap Allow from this source.\n### Windows\n1. [Download neodeemer_windows.exe](https://github.com/Tutislav/neodeemer/releases/latest)\n2. Just open the downloaded exe (It doesn't require installation)\n\n## Running from source\n1. Install Python 3.8.10 or later if you don't have it already\n2. Clone this repo\n3. Get your own [Spotify](https://developer.spotify.com/dashboard/) and [YouTube](https://developers.google.com/youtube/v3/getting-started) API keys\n4. Create `.env` file in `neodeemer\\neodeemer` (folder where is main.py) like this:\n    ```dotenv\n    SPOTIPY_CLIENT_ID=\n    SPOTIPY_CLIENT_SECRET=\n    YOUTUBE_API_KEY=\n    ```\n5. Continue depending on your platform\n### Windows\n```cmd\ncd neodeemer\\neodeemer\npython -m venv venv\nvenv\\Scripts\\activate\npip install -r requirements.txt\npython main.py\n```\n### Linux\n```bash\ncd neodeemer/neodeemer\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\npython3 main.py\n```\n\n## Browser Extension\nYou can install Neodeemer UserScript to download music directly from YouTube video page.\n1. Install [TamperMonkey](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo) to your browser\n2. Install [Neodeemer UserScript](https://raw.githubusercontent.com/Tutislav/neodeemer/main/neodeemer/utils/userscript.user.js)\n3. Start Neodeemer\n4. Enable WebApi in Neodeemeer settings\n5. Go to any YouTube video and click Neodeemer icon under the video, it will add video to download queue\n### Download to different device\n1. Click on TamperMonkey extension\n2. Go to *Control Panel \u003e Installed Scripts \u003e Neodeemer UserScript*\n3. Change `localhost` to `yourdeviceip` on these lines:\n    ```js\n    // @connect         yourdeviceip\n    ```\n    ```js\n    const host = \"yourdeviceip\";\n    ```\n    where `yourdeviceip` is IP adress of device you want to control (e.g. 192.168.0.123).\\\n    You can get your device IP depending on your OS:\\\n    Android - *System Settings \u003e Wi-Fi \u003e YourNetwork \u003e IP Address*\\\n    Windows - *cmd \u003e ipconfig \u003e IPv4 Address*\\\n    Linux - *terminal \u003e ip addr \u003e inet*\n\n## Issues\nIf encounter some tracks, that has bad quality or even doesn't match the name, you can submit it directly in the app using\n\u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"img/bug_outline_light.png\"\u003e\n    \u003cimg src=\"img/bug_outline.png\" alt=\"Bug icon\"\u003e\n\u003c/picture\u003e\nicon, when you select track.\\\nIf you have other issue or some idea to make the app better, just open a new issue on GitHub.\n\n## Acknowledgments\nThis app wouldn't be possible to make without these libraries:\n- [Kivy](https://kivy.org/)\n- [KivyMD](https://github.com/kivymd/KivyMD)\n- [Spotipy](https://github.com/plamere/spotipy)\n- [youtube_search](https://github.com/joetats/youtube_search)\n- [ytmusicapi](https://github.com/sigma67/ytmusicapi)\n- [pytube](https://github.com/pytube/pytube)\n- [yt-dlp](https://github.com/yt-dlp/yt-dlp)\n- [Poke](https://github.com/ashley0143/poke)\n- [LRCLIB](https://github.com/tranxuanthang/lrclib)\n- [music-tag](https://github.com/KristoforMaynard/music-tag)\n- [FFPyPlayer](https://github.com/matham/ffpyplayer)\n- [Plyer](https://github.com/kivy/plyer)\n- [python-dotenv](https://github.com/theskumar/python-dotenv)\n- [Requests](https://github.com/psf/requests)\n- [Unidecode](https://github.com/avian2/unidecode)\n- [Certifi](https://github.com/certifi/python-certifi)\n- [TamperMonkey](https://www.tampermonkey.net/)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftutislav%2Fneodeemer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftutislav%2Fneodeemer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftutislav%2Fneodeemer/lists"}