PyIDM is a python open source (Internet Download Manager)
with multi-connections, high speed engine,
it downloads general files and videos from youtube and tons of other streaming websites .
Developed in Python, based on "pyCuRL/libcurl", "youtube_dl", and "PySimpleGUI"
- High download speeds "based on libcurl" - See Speed test of: aria2 vs PyIDM.
- Multi-connection downloading "Multithreading"
- Scan and resume uncompleted downloads.
- Support for Youtube, and a lot of stream websites "using youtube-dl to fetch info and libcurl to download data".
- download entire video playlist or selected videos.
- support for fragmented video streams.
- support for encrypted/nonencrypted HLS media streams.
- watch videos while downloading* "some videos will have no audio until finish downloading"
- Auto check for application updates.
- Scheduling downloads
- Re-using existing connection to remote server.
- Clipboard Monitor.
- Refresh expired urls.
- Simple GUI interface with 140 themes available.
- proxy support (http, https, socks4, and socks5).
- user can control a lot of options:
- select theme.
- set proxy.
- selecting Segment size.
- Speed limit.
- Max. Concurrent downloads.
- Max. connections per download.
How to install PyIDM?
You have 3 options to run PyIDM on your operating system:
Windows portable version:
Latest Windows portable version available here.
unzip, and run from PyIDM.exe, no installation required.
python -m pip install pyidm --upgrade --no-cache
then you can run application from Terminal by:
python -m pyidmnote pyidm name in small letters
pyidman exexutable "i.e. pyidm.exe on windows" will be located at "python/scripts", if it doesn't work append "python/scripts" folder to PATH.
run from github source code:
PyIDM is a python app. so, it can run on any platform that can run python, To run from source, you have to have a python installed, "supported python versions is 3.6, 3.7, and 3.8", then download or clone this repository, and run PyIDM.py (it will install the other required python packages automatically if missing) if PyIDM failed to install required packages, you should install it manually, refer to "Dependencies" section below.
Build PyIDM yourself:
get the source code from github:
git clone https://github.com/pyIDM/PyIDM.git
or get the source code from PyPi:
navigate to https://pypi.org/project/pyIDM/#files and download a tar ball, example file name "pyIDM-2020.3.22.tar.gz", then extract it
open your terminal or command prompt and navigate to pyidm folder then type below command
python setup.py install
run PyIDM from Terminal by typing:
python -m pyidmor just
below are the requirements to run from source:
- Python 3.6+: tested with python 3.6 on windows, and 3.7, 3.8 on linux
- ffmpeg : for merging audio with youtube DASH videos "it will be installed automatically on windows"
Required python packages:
- pycurl: is a Python interface to libcurl / curl as our download engine,
- PySimpleGUI: a beautiful gui builder,
- youtube_dl: famous youtube downloader, limited use for meta information extraction only but videos are downloaded using pycurl
- certifi: required by 'pycurl' for validating the trustworthiness of SSL certificates,
- pyperclip: A cross-platform clipboard module for monitoring url copied to clipboard, requires "xclip or xsel to be available on linux"
- plyer: for systray area notification.
** please read notes below
PyIDM application will do its best to install missing packages automatically once you run it. or you can install required packages manually using:
pip install -r requirements.txt
python -m pip install --user --upgrade certifi PySimpleGUI pyperclip plyer youtube_dl pycurl pillow
Why another download manager?:
With all free and paid download manager why someone may need another one?
I believe in one term, "if the product is free, then you are the product", most (if not all) free applications collect data about you, some of them are toxic and plant trojans and spyware in your system, then I decided to make my own download manager based on python with
why not just use youtube-dl from command line? the answer is multithreading / multiconnection is not available in youtube-dl, most of the time streaming servers like youtube limit speed per connection and you end up with slow download speeds.
for windows users:
normal pip install i.e
python -m pip install pycurl might fail on windows because you need to build libcurl on your system first which is a headache.
your best choice if pip fail is to download exe file for pycurl from its official download link, find the file that match your windows system and python version installed on your system, last checked on 28-01-2020, found available files for almost all Python versions upto version 3.7
example: if you have python 3.6 installed on windows 32bit, you should download "pycurl-126.96.36.199.win32-py3.6.exe" file and install it, another example: if you have python 3.7 running on windows 64 bit, you should choose and download "pycurl-188.8.131.52.win-amd64-py3.7.exe" file
other download options include a wheel, zip file, or even a windows installer
for linux users:
there is no issues, since most linux distros have curl preinstalled, so pycurl will link with libcurl library to get built with no issues, checked with python versions 3.6, 3.7, and 3.8 working with no problems.
youtube website changes frequently, if this application failed to retrieve video/playlist data you should update youtube-dl module thru PyIDM setting tab or manually by
python -m pip install youtube_dl --upgrade
Pyperclip is a cross-platform Python module for copy and paste clipboard functions. it is being used if you want to monitor clipboard for files urls and it will be processed automatically by the application. On Linux, this module makes use of the xclip or xsel commands, which should come with the os. Otherwise run "sudo apt-get install xclip" on Debian like or "sudo pacman -S xclip" on archlinux
Versions change log:
ChangeLog.txt is included in source code.
How to contribute to this project:
1- by testing the application and opening new issue for bug reporting, feature request, or suggestions.
2- fork this repo and pull request