Comments (15)
i tryed with windows it gives ffmpeg error
from ytmdl.
Would be super cool if this tutorial above was featured on the main page somewhere to help out windows users!
from ytmdl.
Added in 2021.1.14
.
from ytmdl.
Here's a snippet of my Scripts
directory. You can see youtube-dl.exe
and the renamed ytmdl
.
from ytmdl.
On Windows your ytmdl
script gets into Scripts
directory (C:\app\dev\python\Python37\Scripts
on my machine). Because it hasn't got the .py
extension I cannot run it from the command line.
>ytmdl
'ytmdl' is not recognized as an internal or external command,
operable program or batch file.
If I change the name to ytmdl.py
(my PATHEXT
env var has the .py
in) then I get the following error:
>ytmdl
Traceback (most recent call last):
File "C:\app\dev\python\Python37\Scripts\ytmdl.py", line 19, in <module>
from ytmdl import (
File "C:\app\dev\python\Python37\Scripts\ytmdl.py", line 19, in <module>
from ytmdl import (
ImportError: cannot import name 'dir' from 'ytmdl' (C:\app\dev\python\Python37\Scripts\ytmdl.py)
If I change the name to ytmusic-dl.py
then I get the following message no matter what I pass as the argument:
>ytmusic-dl Macarena
==> Song Name is required. Check 'ytmdl --help' for help.
I guess one of the problems is your use of ytmdl
name for both the script name and the package name. Other issue might be how you get the command line arguments. You don't seem to get them by referencing sys.argv
, why?
from ytmdl.
It is something to do with the argparse
not working as expected. I added print(args)
in the main()
and am getting this
>ytmusic-dl --url https://www.youtube.com/watch?v=Uv5zKd1rqcM
Namespace(SONG_NAME=[], album=None, artist=None, choice=None, disable_file=False, disable_metaadd=False, format='mp3', ignore_errors=False, level='INFO', list=None, list_level=False, manual_meta=False, nolocal=False, pl_end=None, pl_items=None, pl_start=None, proxy=None, quiet=False, skip_meta=False, song=None, trim=False, url=None)
==> Song Name is required. Check 'ytmdl --help' for help.
from ytmdl.
@glaukon-ariston The name of the script should not be an issue. The package is supposed to be installed in the /lib/site-packages/
directory and since the script is in a different directory, it will import the package and not itself. Can you check if the package is installed properly??
Regarding argparse
it does seem like the args are not being parsed properly, perhaps that's a windows related issue by argparse?
from ytmdl.
Installed it on a different computer. It seems to work after renaming the script.
>pip install ytmdl
Collecting ytmdl
Downloading https://files.pythonhosted.org/packages/6a/60/4c377d3d2c29347fccbd21036cd8058f6d90e9fc34feb7fd97bc67e3a9df/ytmdl-2020.7.26-py3-none-any.whl
Requirement already satisfied: colorama in c:\app\dev\python37\lib\site-packages (from ytmdl) (0.4.1)
Collecting ffmpeg-python (from ytmdl)
Downloading https://files.pythonhosted.org/packages/d7/0c/56be52741f75bad4dc6555991fabd2e07b432d333da82c11ad701123888a/ffmpeg_python-0.2.0-py3-none-any.whl
Collecting unidecode (from ytmdl)
Downloading https://files.pythonhosted.org/packages/d0/42/d9edfed04228bacea2d824904cae367ee9efd05e6cce7ceaaedd0b0ad964/Unidecode-1.1.1-py2.py3-none-any.whl (238kB)
100% |████████████████████████████████| 245kB 322kB/s
Collecting downloader-cli (from ytmdl)
Downloading https://files.pythonhosted.org/packages/86/0c/3fd34b2e4c7a4c4b354ff9f6a81737c15ead8ff51e1226fc575a9271021b/downloader_cli-0.2.0-py3-none-any.whl
Collecting mutagen (from ytmdl)
Downloading https://files.pythonhosted.org/packages/16/b3/f7aa8edf2ff4495116f95fd442b2a346aa55d1d46313143c8814886dbcdb/mutagen-1.45.1-py3-none-any.whl (218kB)
100% |████████████████████████████████| 225kB 1.0MB/s
Requirement already satisfied: lxml in c:\app\dev\python37\lib\site-packages (from ytmdl) (4.3.0)
Collecting pysocks (from ytmdl)
Downloading https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl
Collecting youtube-search (from ytmdl)
Downloading https://files.pythonhosted.org/packages/be/fb/5191d778060169440975e20f60eb454f9cd616a077ecec86c9b5c20553f5/youtube_search-1.1.1-py3-none-any.whl
Collecting pyxdg (from ytmdl)
Downloading https://files.pythonhosted.org/packages/ea/13/de39ddf4f9f9cea0c7684cd54a50d79c97ea99c9f6aed798fd13d0bd4609/pyxdg-0.27-py2.py3-none-any.whl (49kB)
100% |████████████████████████████████| 51kB 795kB/s
Requirement already satisfied: requests in c:\app\dev\python37\lib\site-packages (from ytmdl) (2.21.0)
Collecting bs4 (from ytmdl)
Downloading https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Collecting itunespy==1.5.5 (from ytmdl)
Downloading https://files.pythonhosted.org/packages/44/c9/88c9b60699ef8e6fad710fcb09352f842298bdf97c110e8279f1d22f292b/itunespy-1.5.5.tar.gz
Collecting youtube-dl (from ytmdl)
Downloading https://files.pythonhosted.org/packages/9d/5e/6a2fda6c6189a5a084dd839876d92bc6c94cd82445f405bd235a7115389e/youtube_dl-2020.11.12-py2.py3-none-any.whl (1.8MB)
100% |████████████████████████████████| 1.8MB 367kB/s
Requirement already satisfied: future in c:\app\dev\python37\lib\site-packages (from ffmpeg-python->ytmdl) (0.18.2)
Collecting urllib3>=1.25.6 (from downloader-cli->ytmdl)
Downloading https://files.pythonhosted.org/packages/cc/f0/e6ff89dddc1cb9f57b3e0f9dc06f444c884f1ad0c2ad17e2f1d5e7d0d1f7/urllib3-1.26.1-py2.py3-none-any.whl (136kB)
100% |████████████████████████████████| 143kB 564kB/s
Requirement already satisfied: idna<2.9,>=2.5 in c:\app\dev\python37\lib\site-packages (from requests->ytmdl) (2.8)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\app\dev\python37\lib\site-packages (from requests->ytmdl) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\app\dev\python37\lib\site-packages (from requests->ytmdl) (2018.11.29)
Collecting beautifulsoup4 (from bs4->ytmdl)
Downloading https://files.pythonhosted.org/packages/d1/41/e6495bd7d3781cee623ce23ea6ac73282a373088fcd0ddc809a047b18eae/beautifulsoup4-4.9.3-py3-none-any.whl (115kB)
100% |████████████████████████████████| 122kB 520kB/s
Collecting soupsieve>1.2; python_version >= "3.0" (from beautifulsoup4->bs4->ytmdl)
Downloading https://files.pythonhosted.org/packages/6f/8f/457f4a5390eeae1cc3aeab89deb7724c965be841ffca6cfca9197482e470/soupsieve-2.0.1-py3-none-any.whl
Building wheels for collected packages: bs4, itunespy
Running setup.py bdist_wheel for bs4 ... done
Stored in directory: C:\app\dev\hp\user\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d52235414c3467d8889be38dd472
Running setup.py bdist_wheel for itunespy ... done
Stored in directory: C:\app\dev\hp\user\AppData\Local\pip\Cache\wheels\37\63\6c\2d5776c8f0ca36bd6a86410888eedf49e67925b77375da0690
Successfully built bs4 itunespy
requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.26.1 which is incompatible.
Installing collected packages: ffmpeg-python, unidecode, urllib3, downloader-cli, mutagen, pysocks, youtube-search, pyxdg, soupsieve, beautifulsoup4, bs4, itunespy, youtube-dl, ytmdl
Found existing installation: urllib3 1.24.1
Uninstalling urllib3-1.24.1:
Successfully uninstalled urllib3-1.24.1
Successfully installed beautifulsoup4-4.9.3 bs4-0.0.1 downloader-cli-0.2.0 ffmpeg-python-0.2.0 itunespy-1.5.5 mutagen-1.45.1 pysocks-1.7.1 pyxdg-0.27 soupsieve-2.0.1 unidecode-1.1.1 urllib3-1.26.1 youtube-dl-2020.11.12 youtube-search-1.1.1 ytmdl-2020.7.26
You are using pip version 18.1, however version 20.3b1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
>python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ytmdl
>>>
>ytmdl
'ytmdl' is not recognized as an internal or external command,
operable program or batch file.
>rename C:\app\dev\Python37\Scripts\ytmdl C:\app\dev\Python37\Scripts\ytmdl.py
>ytmdl
'ytmdl' is not recognized as an internal or external command,
operable program or batch file.
>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
>set PATHEXT=%PATHEXT%;.PY
>ytmdl
Traceback (most recent call last):
File "C:\app\dev\Python37\Scripts\ytmdl.py", line 19, in <module>
from ytmdl import (
File "C:\app\dev\Python37\Scripts\ytmdl.py", line 19, in <module>
from ytmdl import (
ImportError: cannot import name 'dir' from 'ytmdl' (C:\app\dev\Python37\Scripts\ytmdl.py)
>rename C:\app\dev\Python37\Scripts\ytmdl.py C:\app\dev\Python37\Scripts\ytmusic-dl.py
>ytmusic-dl
c:\app\dev\python37\lib\site-packages\requests\__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.1) or chardet (3.0.4) doesn't match a supported version!
RequestsDependencyWarning)
==> Created new config since none was present
==> Song Name is required. Check 'ytmdl --help' for help.
>ytmusic-dl --help
c:\app\dev\python37\lib\site-packages\requests\__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.1) or chardet (3.0.4) doesn't match a supported version!
RequestsDependencyWarning)
usage: ytmusic-dl.py [-h] [-q] [--song SONG-METADATA] [--choice CHOICE]
[--artist ARTIST] [--album ALBUM] [--disable-metaadd]
[--skip-meta] [-m] [--proxy URL] [--url URL]
[--list PATH TO LIST] [--nolocal] [--format FORMAT]
[--trim] [--version] [--pl-start NUMBER]
[--pl-end NUMBER] [--pl-items ITEM_SPEC]
[--ignore-errors] [--level LEVEL] [--disable-file]
[--list-level]
[SONG_NAME [SONG_NAME ...]]
positional arguments:
SONG_NAME Name of the song to download. Can be an URL to a
playlist as well. It will be automatically recognized.
optional arguments:
-h, --help show this help message and exit
-q, --quiet Don't ask the user to select songs if more than one
search result. The first result in each case will be
considered.
--proxy URL Use the specified HTTP/HTTPS/SOCKS proxy. To enable
SOCKS proxy, specify a proper scheme. For example
socks5://127.0.0.1:1080/. Pass in an empty string
(--proxy "") for direct connection
--url URL Youtube song link.
--list PATH TO LIST Download list of songs. The list should have one song
name in every line.
--nolocal Don't search locally for the song before downloading.
--format FORMAT The format in which the song should be downloaded.
Default is [MP3]. Available options are [m4a]
--trim, -t Trim out the audio from the song. Use underlying
speech and music segmentation engine to determine and
keep only the music in the file. Useful in songs where
there are speeches, noise etc before/after the start
of the song. Default is false.
--version show the program version number and exit
Metadata:
--song SONG-METADATA The song to search in Metadata. Particularly useful
for songs that have the names in a different language
in YouTube. For Example, greek songs.
--choice CHOICE The choice that the user wants to go for. Usefull to
pass along with --quiet. Choices start at 1
--artist ARTIST The name of the song's artist. Pass it with a song
name.
--album ALBUM The name of the song's album. Pass it with a song
name.
--disable-metaadd Disable addition of passed artist and album keyword to
the youtube search in order to get a more accurate
result. (Default: false)
--skip-meta Skip setting the metadata and just copy the converted
song to the destination directory. '--manual-meta'
will override this option, pass only one of them.
-m, --manual-meta Manually enter song details.
Playlist:
--pl-start NUMBER Playlist video to start at (default is 1)
--pl-end NUMBER Playlist video to end at (default is last)
--pl-items ITEM_SPEC Playlist video items to download. Specify indices of
the videos present in the playlist seperated by commas
like: '--playlist-items 1, 2, 4, 6' if you want to
download videos indexed 1, 2, 4 and 6. Range can also
be passed like: '--playlist-items 1-3, 5-7' to
download the videos indexed at 1, 2, 3, 5, 6, 7.
--ignore-errors Ignore if downloading any video fails in a playlist.
If passed, the execution will move to the next video
in the passed playlist.
Logger:
--level LEVEL The level of the logger that will be used while
verbosing. Use `--list-level` to check available
options.
--disable-file Disable logging to files
--list-level List all the available logger levels.
>ytmusic-dl --url https://www.youtube.com/watch?v=Uv5zKd1rqcM
c:\app\dev\python37\lib\site-packages\requests\__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.1) or chardet (3.0.4) doesn't match a supported version!
RequestsDependencyWarning)
==> Searching to see if already present in C:\app\dev\hp\projects
==> Downloading Los Del Rio - La Macarena ( Full Spanish Version with Lyrics in 320kbps
==> Saving the files to: C:\app\dev\hp\user\.cache\ytmdl
1024 bytes| 33 Kb/s || ETA: 5 s |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 0% 3 KB | 20 Kb/s || ETA: 5 s |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 0% 7 KB | 33 Kb/s || ETA: 5 s |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 0% 15 KB | 55 Kb/s || ETA: 5 s |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 0% 31 KB | 102 Kb/s || ETA: 5 s |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 1% 63 KB | 172 Kb/s || ETA: 5 s |░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 1% 127 KB | 297 Kb/s || ETA: 5 s |▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 3% 255 KB | 452 Kb/s || ETA: 4 s |▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 6% 511 KB | 404 Kb/s || ETA: 4 s |▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 12% 868 KB | 418 Kb/s || ETA: 3 s |▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 20% 1 MB | 422 Kb/s || ETA: 2 s |▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 29% 2 MB | 402 Kb/s || ETA: 1 s |▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░| 39% 2 MB | 421 Kb/s || ETA: 0 s |▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░| 47% 3 MB | 447 Kb/s || ETA: -1 s |▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░| 59% 3 MB | 453 Kb/s || ETA: -2 s |▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░| 72% 4 MB | 467 Kb/s || ETA: -3 s |▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░| 83% 4 MB | 462 Kb/s || ETA: -4 s |▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░| 96% 4 MB | 470 Kb/s || ETA: -5 s |▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓| 100% ==> Downloaded!
==> Converting to mp3...
==> Getting song data for los del rio la macarena spanish version with ...
==> Something went wrong with iTunes. The program will continue withthe other providers. Please check 'C:\app\dev\hp\user\.cache\ytmdl\logs\log.cat' for more details.
==> "itunes" isn't implemented. Skipping!
==> Something went wrong with Gaana. The program will continue withthe other providers. Please check 'C:\app\dev\hp\user\.cache\ytmdl\logs\log.cat' for more details.
==> "gaana" isn't implemented. Skipping!
==> No metadata provider in the configuration is implemented. Please change it to something available or use the --skip-meta flag
from ytmdl.
@glaukon-ariston Wow, that's pretty awesome. Seems like the only issue is to rename the file and it will start working all right. You did not have any issue downloading the songs??
Also you had to add the .py
to $PATHEXT
in order for it to recognize the py file as a script.
Can you please tell me where the ytmdl
package is located? You can get it by running the following command
pip show ytmdl
from ytmdl.
@glaukon-ariston Can you also give me the installed location of youtube-dl
? Also does youtube-dl
work out of the box?
What does running youtube-dl
on the command line do? Does it throw a similar error?
from ytmdl.
On my system youtube-dl
is youtube-dl.exe
, a Windows executable.
The song has been downloaded and converted into MP3, but not in the current directory. I had to chase it down, it was in C:\app\dev\hp\user\.cache\ytmdl\
(named Los#Del#Rio#-#La#Macarena#(#Full#Spanish#Version#with#Lyrics.mp3_new.mp3
) so it seems the last part of the processing didn't go well (itunes
, gaana
, etc.).
>pip show ytmdl
Name: ytmdl
Version: 2020.7.26
Summary: Youtube Music Downloader
Home-page: https://github.com/deepjyoti30/ytmdl
Author: Deepjyoti Barman
Author-email: deep.barma30@gmail.com
License: UNKNOWN
Location: c:\app\dev\python37\lib\site-packages
Requires: requests, colorama, pyxdg, mutagen, pysocks, lxml, bs4, youtube-search, unidecode, itunespy, downloader-cli, youtube-dl, ffmpeg-python
Required-by:
from ytmdl.
@glaukon-ariston Thanks for giving all the info. So it seems like the package is being installed correctly but the script has a conflict of name while executing. I asked you for the location of youtube-dl
because its package structure is similar to ytmdl
. I think if I ship ytmdl as an executable, like youtube-dl
does, the issues would be fixed.
Regarding the metadata issue, I think it might be related to the config file being created. I would need to dig deeper in order to know why exactly it's failing. As of the latest releases, we have added a functionality to select metadata providers from the config and thus it is important to have a config file.
Let me first fix the issue related to installation and after that perhaps I can open up a new issue regarding the metadata part.
from ytmdl.
Thanks to everyone that have been commenting here with solutions. I was finally able to make ytmdl
work on Windows. As of now, I tested it and it worked all right. There is a possibility of some bugs since I did not get a chance for an indepth usage.
However, I would like to request you guys to try it out for yourself and tell me if you do find any issues.
Since ytmdl
depends on simber and downloader-cli, I had to make some changes to those packages as well in order to fix some bugs.
Install latest git version of simber:
- Get the latest commits from the simber repo.
- Install using
python setup.py install
.
Cross check if the version is 0.1.3
or above.
Install latest git version of downloader-cli:
- Get the latest commits from the repo
- Install using
python setup.py install
Cross check the version is 0.2.1
or above.
Install latest changes of ytmdl
- Get the latest commits from the
windows
branch. - Install using
python setup.py install
.
Cross check the version is 2020.11.20-dev
or above.
Once above is done, you should have a working installation of ytmdl
for windows.
Add ffmpeg to path. (Optional)
ffmpeg might not be added to the path by default. This will raise an error from ytmdl
stating ytmdl was not found. In order to fix this:
- Download the latest ffmpeg zip from here
- Unzip the file.
- Copy the path of the
bin
directory inside the extracted directory and add it to thePATH
:
set PATH=%PATH%;<path you copied>
You can report back the issues, (if you face any), here.
Thanks @manthanabc @glaukon-ariston
from ytmdl.
I also had problems with popen('stty size', 'r')
parts, had to replace them for shutil.get_terminal_size().columns
Also using .format in 2020 is kinda upsetting. f strings are much cleaner way to interpolate strings.
from ytmdl.
@vrnvorona That is already fixed. I was aware of that issue and it was happening in the downloader-cli
package. I have already made changes in that package. This is why I asked to install the latest version of that package as well.
from ytmdl.
Related Issues (20)
- Fetching metadata from yt-dlp using --add-metadata HOT 7
- Filename control from CLI HOT 5
- Ytmdl skipping meta without flags and deleting the downloaded file. HOT 1
- Why does it output 320 kbps MP3? HOT 2
- Super annoying to tag playlist HOT 1
- Automatic skipping of songs already HOT 1
- Didn't work: complaining about iTunes... HOT 7
- ytmdl --list YOUTUBE_PLAYLIST_URL ====> YOUTUBE_PLAYLIST_URL is empty HOT 1
- Question
- Allow overriding ytmdl config file every run HOT 9
- Windows "|" in song name issue again HOT 1
- Zombie files buildup HOT 1
- Saavn songs doesn't have 100x100 album art HOT 1
- Add sponsorblock support HOT 1
- [Bug] Errors from missing videos in playlists don't seem to be handled gracefully.
- [Premium Youtube Music] can't download premium only songs! HOT 1
- Crash on ampersand in artist HOT 2
- "UnicodeEncodeError: 'charmap' codec can't encode character" when trying to download a song. HOT 3
- [FEATURE REQUEST] Consider dropping/replacing ffmpeg-python dependency because of future transitive dependency HOT 2
- Add support for showing `album name` in the metadata results
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ytmdl.