Giter Site home page Giter Site logo

streamrip's Introduction

streamrip logo

Downloads Code style: black

A scriptable stream downloader for Qobuz, Tidal, Deezer and SoundCloud.

downloading an album

Features

  • Fast, concurrent downloads powered by aiohttp
  • Downloads tracks, albums, playlists, discographies, and labels from Qobuz, Tidal, Deezer, and SoundCloud
  • Supports downloads of Spotify and Apple Music playlists through last.fm
  • Automatically converts files to a preferred format
  • Has a database that stores the downloaded tracks' IDs so that repeats are avoided
  • Concurrency and rate limiting
  • Interactive search for all sources
  • Highly customizable through the config file
  • Integration with youtube-dl

Installation

First, ensure Python (version 3.10 or greater) and pip are installed. Then install ffmpeg. You may choose not to install this, but some functionality will be limited.

pip3 install streamrip --upgrade

When you type

rip

it should show the main help page. If you have no idea what these mean, or are having other issues installing, check out the detailed installation instructions.

For Arch Linux users, an AUR package exists. Make sure to install required packages from the AUR before using makepkg or use an AUR helper to automatically resolve them.

git clone https://aur.archlinux.org/streamrip.git
cd streamrip
makepkg -si

or

paru -S streamrip

Streamrip beta

If you want to get access to the latest and greatest features without waiting for a new release, install from the dev branch with the following command

pip3 install git+https://github.com/nathom/streamrip.git@dev

Example Usage

For Tidal and Qobuz, you NEED a premium subscription.

Download an album from Qobuz

rip url https://www.qobuz.com/us-en/album/rumours-fleetwood-mac/0603497941032

Download multiple albums from Qobuz

rip url https://www.qobuz.com/us-en/album/back-in-black-ac-dc/0886444889841 https://www.qobuz.com/us-en/album/blue-train-john-coltrane/0060253764852

Download the album and convert it to mp3

rip url --codec=MP3 https://open.qobuz.com/album/0060253780968

To set the maximum quality, use the --max-quality option to 0, 1, 2, 3, 4:

Quality ID Audio Quality Available Sources
0 128 kbps MP3 or AAC Deezer, Tidal, SoundCloud (most of the time)
1 320 kbps MP3 or AAC Deezer, Tidal, Qobuz, SoundCloud (rarely)
2 16 bit, 44.1 kHz (CD) Deezer, Tidal, Qobuz, SoundCloud (rarely)
3 24 bit, ≤ 96 kHz Tidal (MQA), Qobuz, SoundCloud (rarely)
4 24 bit, ≤ 192 kHz Qobuz
rip url --max-quality=3 https://tidal.com/browse/album/147569387

Using 4 is generally a waste of space. It is impossible for humans to perceive the between sampling rates higher than 44.1 kHz. It may be useful if you're processing/slowing down the audio.

Search for albums matching lil uzi vert on SoundCloud

rip search tidal playlist 'rap'

streamrip interactive search

Search for Rumours on Tidal, and download it

rip search tidal album 'fleetwood mac rumours'

Download a last.fm playlist using the lastfm command

rip lastfm https://www.last.fm/user/nathan3895/playlists/12126195

For more customization, see the config file

rip config open

If you're confused about anything, see the help pages. The main help pages can be accessed by typing rip by itself in the command line. The help pages for each command can be accessed with the -help flag. For example, to see the help page for the url command, type

rip url --help

example_help_page.png

Other information

For more in-depth information about streamrip, see the help pages and the wiki.

Contributions

All contributions are appreciated! You can help out the project by opening an issue or by submitting code.

Issues

If you're opening an issue use the Feature Request or Bug Report templates properly. This ensures that I have all of the information necessary to debug the issue. If you do not follow the templates, I will silently close the issue and you'll have to deal with it yourself.

Code

If you're new to Git, follow these steps to open your first Pull Request (PR):

  • Fork this repository
  • Clone the new repository
  • Commit your changes
  • Open a pull request to the dev branch

Please document any functions or obscure lines of code.

The Wiki

To help out streamrip users that may be having trouble, consider contributing some information to the wiki. Nothing is too obvious and everything is appreciated.

Acknowledgements

Thanks to Vitiko98, Sorrow446, and DashLt for their contributions to this project, and the previous projects that made this one possible.

streamrip was inspired by:

Disclaimer

I will not be responsible for how you use streamrip. By using streamrip, you agree to the terms and conditions of the Qobuz, Tidal, and Deezer APIs.

Sponsorship

Consider becoming a Github sponsor for me if you enjoy my open source software.

streamrip's People

Contributors

aberfan avatar alexkalopsia avatar aredridel avatar canadianbaconboi avatar dependabot[bot] avatar disconnect78 avatar djdoubled avatar dlanis avatar dr4c0ftw avatar imgbotapp avatar jayden000 avatar joegoldin avatar lokrok avatar lzgirlcat avatar nathom avatar notmarek avatar reaitten avatar realstickman avatar tannerbaum avatar xz3513 avatar yodatak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

streamrip's Issues

KeyError: 'audioQuality'

Traceback (most recent call last):
  File "/home/user/streamrip/.venv/bin/rip", line 33, in <module>
    sys.exit(load_entry_point('streamrip', 'console_scripts', 'rip')())
  File "/home/user/streamrip/streamrip/cli.py", line 288, in main
    cli(obj={})
  File "/home/user/streamrip/.venv/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/user/streamrip/.venv/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/user/streamrip/.venv/lib/python3.9/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/home/user/streamrip/.venv/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/user/streamrip/.venv/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/user/streamrip/.venv/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/user/streamrip/streamrip/cli.py", line 106, in cli
    core.download()
  File "/home/user/streamrip/streamrip/core.py", line 208, in download
    item.load_meta()
  File "/home/user/streamrip/streamrip/downloader.py", line 815, in load_meta
    self._load_tracks()
  File "/home/user/streamrip/streamrip/downloader.py", line 919, in _load_tracks
    Track.from_album_meta(album=self.meta, pos=i, client=self.client)
  File "/home/user/streamrip/streamrip/downloader.py", line 359, in from_album_meta
    meta = TrackMetadata(album=album, track=track, source=client.source)
  File "/home/user/streamrip/streamrip/metadata.py", line 97, in __init__
    self.add_track_meta(track)
  File "/home/user/streamrip/streamrip/metadata.py", line 247, in add_track_meta
    self.add_album_meta(track["album"])
  File "/home/user/streamrip/streamrip/metadata.py", line 168, in add_album_meta
    self.quality = TIDAL_Q_MAP[resp["audioQuality"]]
KeyError: 'audioQuality'

Music service subdirectories.

The tool should create several subdirectories for each music service e.g.:
/home/user/StreamripDownloads/Tidal
/home/user/StreamripDownloads/Qobuz
/home/user/StreamripDownloads/Deezer

TypeError: download() got an unexpected keyword argument 'keep_cover'

C:\>rip -u <DEEZER_URL>
Traceback (most recent call last):
  File "c:\python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Python39\Scripts\rip.exe\__main__.py", line 7, in <module>
  File "c:\python39\lib\site-packages\streamrip\cli.py", line 205, in main
    cli(obj={})
  File "c:\python39\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "c:\python39\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "c:\python39\lib\site-packages\click\core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "c:\python39\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\python39\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "c:\python39\lib\site-packages\click\decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "c:\python39\lib\site-packages\streamrip\cli.py", line 58, in cli
    core.download()
  File "c:\python39\lib\site-packages\streamrip\core.py", line 146, in download
    item.download(**arguments, tag=True)
TypeError: download() got an unexpected keyword argument 'keep_cover'

Occurs when downloading a single track from Deezer, but not an entire album.

track.get("media_number", 1) for track in resp["tracks"]["items"] KeyError: 'tracks'

Album searches fail after upgrade to v0.3.1. I uninstalled and reinstalled streamrip and started w/ a fresh config file, no luck.

rip search 'mad season' streamrip is up-to-date! Logging into qobuz Traceback (most recent call last): File "/usr/local/bin/rip", line 10, in <module> sys.exit(main()) File "/Library/Python/3.8/site-packages/streamrip/cli.py", line 258, in main cli(obj={}) File "/Library/Python/3.8/site-packages/click/core.py", line 829, in __call__ return self.main(*args, **kwargs) File "/Library/Python/3.8/site-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/Library/Python/3.8/site-packages/click/core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Library/Python/3.8/site-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Library/Python/3.8/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/Library/Python/3.8/site-packages/click/decorators.py", line 21, in new_func return f(get_current_context(), *args, **kwargs) File "/Library/Python/3.8/site-packages/streamrip/cli.py", line 165, in search if core.interactive_search(query, kwargs["source"], kwargs["type"]): File "/Library/Python/3.8/site-packages/streamrip/core.py", line 322, in interactive_search results = tuple(self.search(source, query, media_type, limit=50)) File "/Library/Python/3.8/site-packages/streamrip/core.py", line 278, in search yield MEDIA_CLASS[ File "/Library/Python/3.8/site-packages/streamrip/downloader.py", line 729, in from_api info = cls._parse_get_resp(resp, client) File "/Library/Python/3.8/site-packages/streamrip/downloader.py", line 767, in _parse_get_resp track.get("media_number", 1) for track in resp["tracks"]["items"] KeyError: 'tracks'

Downloading from deezer isn't working

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/bin/rip", line 10, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/cli.py", line 183, in main
    cli(obj={})
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/cli.py", line 55, in cli
    core.download()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/core.py", line 132, in download
    item.download(**arguments)
TypeError: download() got an unexpected keyword argument 'embed_cover'

rip -t command not working

% rip -t /Users/kevinpulikkottil/Documents/Epic/urls.txt
streamrip is up-to-date!
Logging into qobuz
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.9/bin/rip", line 8, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 258, in main
    cli(obj={})
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 103, in cli
    core.download()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/core.py", line 163, in download
    if self.config.session["downloads"]["source_subdirectories"]:
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/ruamel/yaml/comments.py", line 826, in __getitem__
    return ordereddict.__getitem__(self, key)
KeyError: 'source_subdirectories'

How to re-login to Tidal?

Changed my password, and now it's saying login failed, token has expired. Deezer is also not working now, saying there was an error parsing the URL.

Feature Request: Library Sync

I'd love to see a feature that looks at your favorited Albums/Tracks on Qobuz and/or Tidal, compares those to the streamrip database (already downloaded) and downloads the delta. This would allow you to run streamrip periodically (nightly, for example) to update your local library w/ any new favorites added since the previous run.

v0.3.1 don't working.

  • v0.3.1 don't working.
  • v0.3 is working.
  • The problem is with the cli and core files.

Traceback (most recent call last):
File "c:\users\ogun\appdata\local\programs\python\python38\lib\runpy.py", line
194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "c:\users\ogun\appdata\local\programs\python\python38\lib\runpy.py", line
87, in run_code
exec(code, run_globals)
File "C:\Users\OGUN\AppData\Local\Programs\Python\Python38\Scripts\rip.exe_m
ain
.py", line 7, in
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\s
treamrip\cli.py", line 258, in main
cli(obj={})
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\c
lick\core.py", line 829, in call
return self.main(*args, **kwargs)
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\c
lick\core.py", line 782, in main
rv = self.invoke(ctx)
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\c
lick\core.py", line 1236, in invoke
return Command.invoke(self, ctx)
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\c
lick\core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\c
lick\core.py", line 610, in invoke
return callback(*args, **kwargs)
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\c
lick\decorators.py", line 21, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\users\ogun\appdata\local\programs\python\python38\lib\site-packages\s
treamrip\cli.py", line 61, in cli
from packaging import version
ModuleNotFoundError: No module named 'packaging'

rip config --reset not working

% rip config --reset
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.9/bin/rip", line 8, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 288, in main
    cli(obj={})
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 258, in config
    config.reset()
AttributeError: 'Command' object has no attribute 'reset'

Tidal download not working

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/bin/rip", line 10, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/cli.py", line 212, in main
    cli(obj={})
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/cli.py", line 52, in cli
    core.handle_urls(kwargs["urls"])
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/core.py", line 113, in handle_urls
    self.handle_item(source, url_type, item_id)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/core.py", line 118, in handle_item
    client = self.get_client(source)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/core.py", line 163, in get_client
    self.login(client)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/core.py", line 176, in login
    client.login(**creds)
TypeError: login() got an unexpected keyword argument 'enabled'

Feature request: If possible skip duplicates and keep highest bitrate

Thanks for this first off, I have been using other downloaders so this AIO is great.
Not sure if possible but it would be nice to only download the highest bitrate if an artist the same multiple times in various bitrates.
As to avoid duplicates or overwriting other tracks and having a mixed bitrate album. I don't mine doing one at a time or a list if need be but would love the artist download without duplicates or mixed media.

Thanks

enhancement: Solve duplicates or overwriting tracks

If possible could you add to the folder naming like [E] for explicit so we know if duplicate albums what is what without looking at the cover or listening to it.

Also, you could add like the barcode, isrc, upc codes to the tags and folder [56854065] to separate albums and keep it from overwriting tracks.
QO-DL Tags

FileNotFoundError: [Errno 2] No such file or directory

Traceback (most recent call last):
  File "/home/user/streamrip/bin/rip", line 33, in <module>
    sys.exit(load_entry_point('streamrip', 'console_scripts', 'rip')())
  File "/home/user/streamrip/streamrip/cli.py", line 285, in main
    cli(obj={})
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/user/streamrip/streamrip/cli.py", line 103, in cli
    core.download()
  File "/home/user/streamrip/streamrip/core.py", line 188, in download
    item.download(**arguments)
  File "/home/user/streamrip/streamrip/downloader.py", line 971, in download
    tqdm_download(self.cover_urls['original'], os.path.join(folder, 'cover.jpg'))
  File "/home/user/streamrip/streamrip/utils.py", line 117, in tqdm_download
    with open(filepath, "wb") as file, tqdm(
FileNotFoundError: [Errno 2] No such file or directory: '/home/user/StreamripDownloads/Your/ Album/cover.jpg'

Deezer Not Working After Latest Update

% rip -u https://www.deezer.com/en/album/6612814
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.9/bin/rip", line 8, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 258, in main
    cli(obj={})
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 61, in cli
    from packaging import version
ModuleNotFoundError: No module named 'packaging'

ModuleNotFoundError: No module named 'fcntl'

C:\>rip -u <URL>
Traceback (most recent call last):
  File "c:\python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Python39\Scripts\rip.exe\__main__.py", line 7, in <module>
  File "c:\python39\lib\site-packages\streamrip\cli.py", line 205, in main
    cli(obj={})
  File "c:\python39\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "c:\python39\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "c:\python39\lib\site-packages\click\core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "c:\python39\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\python39\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "c:\python39\lib\site-packages\click\decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "c:\python39\lib\site-packages\streamrip\cli.py", line 58, in cli
    core.download()
  File "c:\python39\lib\site-packages\streamrip\core.py", line 142, in download
    item.load_meta()
  File "c:\python39\lib\site-packages\streamrip\downloader.py", line 663, in load_meta
    self.meta = self.client.get(self.id, media_type="album")
  File "<decorator-gen-3>", line 2, in get
  File "c:\python39\lib\site-packages\dogpile\cache\region.py", line 1577, in get_or_create_for_user_func
    return self.get_or_create(
  File "c:\python39\lib\site-packages\dogpile\cache\region.py", line 1042, in get_or_create
    with Lock(
  File "c:\python39\lib\site-packages\dogpile\lock.py", line 185, in __enter__
    return self._enter()
  File "c:\python39\lib\site-packages\dogpile\lock.py", line 87, in _enter
    value = value_fn()
  File "c:\python39\lib\site-packages\dogpile\cache\region.py", line 977, in get_value
    value = self._get_from_backend(key)
  File "c:\python39\lib\site-packages\dogpile\cache\region.py", line 1265, in _get_from_backend
    self.backend.get_serialized(key)
  File "c:\python39\lib\site-packages\dogpile\cache\backends\file.py", line 217, in get_serialized
    with self._dbm_file(False) as dbm_obj:
  File "c:\python39\lib\contextlib.py", line 117, in __enter__
    return next(self.gen)
  File "c:\python39\lib\site-packages\dogpile\cache\backends\file.py", line 212, in _dbm_file
    with self._use_rw_lock(write):
  File "c:\python39\lib\contextlib.py", line 117, in __enter__
    return next(self.gen)
  File "c:\python39\lib\site-packages\dogpile\cache\backends\file.py", line 207, in _use_rw_lock
    with self._rw_lock.read():
  File "c:\python39\lib\contextlib.py", line 117, in __enter__
    return next(self.gen)
  File "c:\python39\lib\site-packages\dogpile\cache\backends\file.py", line 320, in read
    self.acquire_read_lock(True)
  File "c:\python39\lib\site-packages\dogpile\cache\backends\file.py", line 402, in acquire_read_lock
    return self._acquire(wait, os.O_RDONLY, self._module.LOCK_SH)
  File "c:\python39\lib\site-packages\dogpile\util\langhelpers.py", line 78, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "c:\python39\lib\site-packages\dogpile\cache\backends\file.py", line 393, in _module
    import fcntl
ModuleNotFoundError: No module named 'fcntl'

fcntl isn't supported on Windows.

Windows not supported

When I run rip.exe I get the following error:

File "C:\Users\{username}\AppData\Roaming\Python\Python38\site-packages\simple_term_menu.py", line 36, in <module>
    import termios
ModuleNotFoundError: No module named 'termios'

Upon doing some research, it seems that termios is not supported in Windows.

Multiple discs.

  • The tool does not create subdirectories when downloading an album consisting of multiple discs.
  • The tool must correctly insert the number of discs in the metedata.

ModuleNotFoundError: No module named 'packaging'

I was unable to open the config file after upgrading to v0.3.1 due to a missing module dependency.

rip config --open Traceback (most recent call last): File "/usr/local/bin/rip", line 10, in <module> sys.exit(main()) File "/Library/Python/3.8/site-packages/streamrip/cli.py", line 258, in main cli(obj={}) File "/Library/Python/3.8/site-packages/click/core.py", line 829, in __call__ return self.main(*args, **kwargs) File "/Library/Python/3.8/site-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/Library/Python/3.8/site-packages/click/core.py", line 1256, in invoke Command.invoke(self, ctx) File "/Library/Python/3.8/site-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Library/Python/3.8/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/Library/Python/3.8/site-packages/click/decorators.py", line 21, in new_func return f(get_current_context(), *args, **kwargs) File "/Library/Python/3.8/site-packages/streamrip/cli.py", line 61, in cli from packaging import version ModuleNotFoundError: No module named 'packaging'

I resolved this manually by installing the 'packaging' module

sudo pip3 install packaging WARNING: The directory '/Users/xxxxxx/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. WARNING: The directory '/Users/xxxxxx/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. Collecting packaging Downloading https://files.pythonhosted.org/packages/3e/89/7ea760b4daa42653ece2380531c90f64788d979110a2ab51049d92f408af/packaging-20.9-py2.py3-none-any.whl (40kB) |████████████████████████████████| 40kB 5.1MB/s Collecting pyparsing>=2.0.2 (from packaging) Downloading https://files.pythonhosted.org/packages/8a/bb/488841f56197b13700afd5658fc279a2025a39e22449b7cf29864669b15d/pyparsing-2.4.7-py2.py3-none-any.whl (67kB) |████████████████████████████████| 71kB 7.2MB/s Installing collected packages: pyparsing, packaging Successfully installed packaging-20.9 pyparsing-2.4.7 WARNING: You are using pip version 19.2.3, however version 21.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

Cannot open config file in Terminal on macOS Mojave 10.14.6

rip config -o and rip config —o do not seem to do anything.

rip config —help properly displays the options, -q and —qobuz also properly prompt new credentials.

Mainly looking to change config for folder and track naming. Thanks!

EDIT: I found config.yaml and could manually edit and save some changes, but folder and track naming don't seem to take effect. I changed it to this and it still downloads in the default naming structure (with artist name, container, etc):

path_format: folder: '({year}) {title} [{bit_depth}bit {sampling_rate}kHz]' track: '{tracknumber}. {title}'

Cannot download Deezer tracks with '?' characters.

If a track has a ? (question mark) in its name it cannot be downloaded.

Downloading Stromae - humain à l'eau
100%|████████████████████████████████████████████████████████████████████████████| 

Downloading Stromae - quand c'est ?
Track is not available for download

Downloading Stromae - sommeil
100%|████████████████████████████████████████████████████████████████████████████| 
Downloading Eric Ghoste - //
100%|████████████████████████████████████████████████████████████████████████████|

Downloading Eric Ghoste - ?
Track is not available for download

Downloading Eric Ghoste - \\
100%|████████████████████████████████████████████████████████████████████████████|

This behaviour only occurs with ? characters. Other Unicode/Extended Ascii characters cause no problem, and neither do other characters that are commonly restricted in filenames, such as / and \, as shown above. Music from the Motion Picture is the perfect album for testing this. I do not own either of the albums above so I have deleted them after using them to test.

Discover Feature Not Working

kevinpulikkottil@kevins-mbp ~ % rip discover
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.9/bin/rip", line 8, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 205, in main
    cli(obj={})
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/cli.py", line 166, in discover
    if core.interactive_search(kwargs["list"], "qobuz", "featured"):
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/core.py", line 269, in interactive_search
    results = tuple(self.search(source, query, media_type, limit=50))
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/core.py", line 224, in search
    client = self.get_client(source)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/core.py", line 160, in get_client
    self.login(client)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/core.py", line 164, in login
    creds = self.config.creds(client.source)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/config.py", line 149, in creds
    return self.qobuz_creds
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/streamrip/config.py", line 143, in qobuz_creds
    "app_id": self.file["qobuz"]["app_id"],
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/ruamel/yaml/comments.py", line 826, in __getitem__
    return ordereddict.__getitem__(self, key)
KeyError: 'app_id'
kevinpulikkottil@kevins-mbp ~ % 

Add medium resolution album art option in the config file

Right now the resolution is very low, and although high resolution album art may not embed correctly, there should be a medium setting for those who want to see their album art better. 600x600 would be a good resolution to set this medium option to.

`ERROR:streamrip.clients:Problem getting JSON. Status code: 503

I upgraded to v0.3 to address an issue where album downloads would fail when cover.jpg couldn't be retrieved. After upgrading, I've been experiencing a lot of album download failures with an error similar to the following. Album downloads that fail with this error always seem to fail while others download just fine.

ERROR:streamrip.clients:Problem getting JSON. Status code: 503 Traceback (most recent call last): File "/usr/local/bin/rip", line 10, in <module> sys.exit(main()) File "/Library/Python/3.8/site-packages/streamrip/cli.py", line 237, in main cli(obj={}) File "/Library/Python/3.8/site-packages/click/core.py", line 829, in __call__ return self.main(*args, **kwargs) File "/Library/Python/3.8/site-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/Library/Python/3.8/site-packages/click/core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Library/Python/3.8/site-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Library/Python/3.8/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/Library/Python/3.8/site-packages/click/decorators.py", line 21, in new_func return f(get_current_context(), *args, **kwargs) File "/Library/Python/3.8/site-packages/streamrip/cli.py", line 145, in search core.download() File "/Library/Python/3.8/site-packages/streamrip/core.py", line 170, in download item.download(**arguments) File "/Library/Python/3.8/site-packages/streamrip/downloader.py", line 908, in download track.download( File "/Library/Python/3.8/site-packages/streamrip/downloader.py", line 204, in download dl_info = self.client.get_file_url(url_id, self.quality) File "/Library/Python/3.8/site-packages/streamrip/clients.py", line 209, in get_file_url return self._api_get_file_url(item_id, quality=quality) File "/Library/Python/3.8/site-packages/streamrip/clients.py", line 347, in _api_get_file_url response, status_code = self._api_request("track/getFileUrl", params) File "/Library/Python/3.8/site-packages/streamrip/clients.py", line 357, in _api_request return r.json(), r.status_code File "/Library/Python/3.8/site-packages/requests/models.py", line 900, in json return complexjson.loads(self.text, **kwargs) File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/__init__.py", line 357, in loads return _default_decoder.decode(s) File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)

streamrip.exceptions.TooLargeCoverArt: Not suitable for Picture embed: 27.994118 MB

Traceback (most recent call last):
  File "/home/user/streamrip/bin/rip", line 33, in <module>
    sys.exit(load_entry_point('streamrip', 'console_scripts', 'rip')())
  File "/home/user/streamrip/streamrip/cli.py", line 258, in main
    cli(obj={})
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/user/streamrip/streamrip/cli.py", line 103, in cli
    core.download()
  File "/home/user/streamrip/streamrip/core.py", line 182, in download
    item.download(**arguments)
  File "/home/user/streamrip/streamrip/downloader.py", line 910, in download
    cover = self.get_cover_obj(cover_path, quality)
  File "/home/user/streamrip/streamrip/downloader.py", line 622, in get_cover_obj
    raise TooLargeCoverArt(
streamrip.exceptions.TooLargeCoverArt: Not suitable for Picture embed: 27.994118 MB
artwork:
  embed: true
  embed_size: large
  download_size: original
  keep_embedded_cover: false
  keep_downloaded_cover: true

No tracks available for download on Deezer.

All music on Deezer is not downloadable. The album art gets downloaded perfectly fine, but no matter what song or album I choose, it would download the album art and all tracks will be "not available for download".
Not really too experienced with computer stuff but I can give you more information if you can tell me how to obtain them.
streamrip issue 1

Syntax error returned on all commands

Getting errors in Mac Terminal when using any of the basic commands (rip --help OR rip search --help). Installed on Mac using pip3 install streamrip --upgrade; pip3 install simple-term-menu.
Here is output.

cala-am03009582 music % rip search --help

Traceback (most recent call last):
File "/usr/local/bin/rip", line 5, in
from streamrip.cli import main
File "/usr/local/lib/python3.7/site-packages/streamrip/cli.py", line 9, in
from .core import MusicDL
File "/usr/local/lib/python3.7/site-packages/streamrip/core.py", line 11, in
from .clients import DeezerClient, QobuzClient, TidalClient
File "", line 1
(pformat(manifest)=)
^
SyntaxError: invalid syntax

Deezer not working

kevin@kevins-mbp ~ % rip -t /Users/kevin/Documents/Epic/urls.txt
Downloading Downtown Binary - 8MB
100%|███████████████████████████████████████| 140k/140k [00:00<00:00, 2.54MiB/s]

Downloading Downtown Binary - 8MB
100%|█████████████████████████████████████| 25.8M/25.8M [00:02<00:00, 12.2MiB/s]
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/bin/rip", line 10, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/cli.py", line 212, in main
    cli(obj={})
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/cli.py", line 62, in cli
    core.download()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/core.py", line 147, in download
    item.download(**arguments)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/downloader.py", line 835, in download
    track.download(quality, folder, progress_bar, database=database)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/streamrip/downloader.py", line 231, in download
    if dl_info.get("enc_key"):
AttributeError: 'str' object has no attribute 'get'
kevin@kevins-mbp ~ % 

Config Error

See #12 for original issue.

After updating python to 3.9.1 as was suggested, now I am getting the following error when running a simple help command:

rip search -help
Traceback (most recent call last):
File "/usr/local/bin/rip", line 5, in
from streamrip.cli import main
File "/usr/local/lib/python3.9/site-packages/streamrip/cli.py", line 13, in
config = Config(CONFIG_PATH)
File "/usr/local/lib/python3.9/site-packages/streamrip/config.py", line 90, in init
self.dump(self.defaults)
File "/usr/local/lib/python3.9/site-packages/streamrip/config.py", line 127, in dump
with open(self._path, "w") as cfg:
FileNotFoundError: [Errno 2] No such file or directory: '/Users/xxxx008/Library/Application Support/streamrip/config.yaml'

AttributeError: 'TrackMetadata' object has no attribute 'disctotal' (tidal)

Traceback (most recent call last):
  File "/home/user/streamrip/bin/rip", line 33, in <module>
    sys.exit(load_entry_point('streamrip', 'console_scripts', 'rip')())
  File "/home/user/streamrip/streamrip/cli.py", line 241, in main
    cli(obj={})
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/user/streamrip/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/user/streamrip/streamrip/cli.py", line 86, in cli
    core.download()
  File "/home/user/streamrip/streamrip/core.py", line 182, in download
    item.download(**arguments)
  File "/home/user/streamrip/streamrip/downloader.py", line 925, in download
    track.tag(cover=cover, embed_cover=embed_cover)
  File "/home/user/streamrip/streamrip/downloader.py", line 415, in tag
    for k, v in self.meta.tags(self.container):
  File "/home/user/streamrip/streamrip/metadata.py", line 331, in __gen_flac_tags
    tag = getattr(self, k)
AttributeError: 'TrackMetadata' object has no attribute 'disctotal

Download path in Termux-Mobile

Hey,
Thanks for the work. I am using Termux in mobile, I have downloaded few tracks but I am not able to identify the downloaded path in mobile phone. Could you please guide me how to set download path in Termux-Mobile. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.