Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
50184b2
build: modernise dependencies so streamrip installs on Python 3.10-3.14
Stensel8 Sep 27, 2026
c8d50b2
fix(test): set genre to Pop/Rock in Qobuz fixture to test genre split…
Jun 16, 2026
315057d
Remove unused import in test (F401)
Mubashir78 Jul 3, 2026
78a0539
fix(qobuz): adapt to album/get and playlist/get no longer returning i…
izzoa Jul 18, 2026
5b8eaf6
Report Qobuz API failures instead of asserting; keep credentials out …
sjbrownrigg Sep 14, 2026
60b6f31
Keep single-track downloads in their disc subfolder
sjbrownrigg Aug 13, 2026
71c6242
Keep the album edition in the title, tags and folder name
sjbrownrigg Aug 13, 2026
34aa766
fix(qobuz): auto-refetch app id/secrets on stale credential error
karolyi Aug 29, 2026
4426471
fix(qobuz): token login, free-account purchases, robust metadata
Stensel8 Sep 27, 2026
29a20ec
Fix crash when Tidal returns 404
sjbrownrigg Aug 13, 2026
9eba1d2
Fix Tidal share links ending in /u
sjbrownrigg Aug 13, 2026
6d8dea5
Don't drop Tidal tracks that have no lyrics
sjbrownrigg Aug 13, 2026
18613a3
Don't warn about tracks that simply have no lyrics
sjbrownrigg Aug 13, 2026
1921ba5
Never let a failed lyrics fetch abort the track
sjbrownrigg Sep 14, 2026
5179d69
Offer a fresh login when saved credentials stop working
sjbrownrigg Aug 27, 2026
944a01c
fix: handle null copyright field in Tidal track response
hi-imruka May 29, 2026
373c7b8
fix(tidal): lossless FLAC by default, hi-res via DASH, safer login
Stensel8 Sep 27, 2026
69fc0f0
fix(deezer): fail fast instead of building a retired CDN URL
Aug 18, 2026
9f81612
fix(deezer): recover delisted tracks through FALLBACK.SNG_ID
Aug 20, 2026
fe42821
fix(deezer): size requests connection pool to match max_connections
Jun 14, 2026
c8566d2
fix(deezer): set pool_maxsize well above max_connections to prevent o…
Jun 14, 2026
8c24906
impl: add album cache with debug logging to DeezerClient
Jun 16, 2026
59d1eb5
change: elevate cache hit log level to info
Jun 16, 2026
4bcb62d
fix(deezer): harden metadata parsing against missing API fields
Jun 14, 2026
874dac0
fix(deezer): paginate song.getFavoriteIds to fetch all loved tracks
Jun 25, 2026
66ee3d2
Add lyrics download for Deezer tracks
leonard-slass Jun 9, 2026
0b64bf9
Make lyrics fetching optional via [downloads].lyrics
leonard-slass Jun 9, 2026
957aa3f
Use synced lyrics from Deezer when available
leonard-slass Jun 10, 2026
2476c72
fix(playlist): sanitize playlist names to prevent path traversal via '/'
Jun 19, 2026
fee2070
fix(deezer): subscription-aware quality, gw playlists, share links
Stensel8 Sep 27, 2026
1eb83af
fix(soundcloud): find the client id again, stop asserting on streams
Stensel8 Sep 27, 2026
fd35e50
Don't mark failed downloads as downloaded
sjbrownrigg Aug 13, 2026
84f705d
Record tracks that fail while resolving
sjbrownrigg Aug 13, 2026
6b0d0af
Add `rip repair` to retry failed downloads
sjbrownrigg Aug 13, 2026
cdb0ef5
Repair through the album, not track by track
sjbrownrigg Aug 19, 2026
43f8c45
fix: bump http.client._MAXHEADERS to 1000 to prevent CDN header drops
Sep 6, 2026
aaf5932
fix: redirect FFmpeg stdin to /dev/null to prevent TTY corruption
Jun 14, 2026
5ffa4e5
Respect configured lossy conversion bitrate
TimoStolz Apr 12, 2026
6a091fb
fix(converter): properly handle cover art for OGG and OPUS output
Jun 14, 2026
101c167
fix(core): reliable downloads, conversion and tagging
Stensel8 Sep 27, 2026
c137eb0
fix(cli): fork-aware update check, clean Ctrl-C, config guards
Stensel8 Sep 27, 2026
09f5c38
style: make ruff check and ruff format pass on the whole repo
Stensel8 Sep 27, 2026
c9aa98c
ci: Renovate + Dependabot, SHA-pinned workflows, Poetry 2
Stensel8 Sep 27, 2026
8043844
docs: install from the Stensel8 fork, document logins and changes
Stensel8 Sep 27, 2026
b3b72d9
fix(qobuz): keep credentials and the app secret out of debug logs
Stensel8 Sep 27, 2026
709a8d0
build: drop Python <3.14 support
Stensel8 Sep 27, 2026
0e816a0
Delete .github/CODEOWNERS
Stensel8 Sep 27, 2026
50a5594
docs: cite issues already resolved by the existing rework
Stensel8 Sep 27, 2026
f636415
streamrip 2.3.0: Python 3.14, upstream fixes, Renovate + Dependabot
Stensel8 Sep 27, 2026
eb91ac0
docs: add a plain venv option to the install instructions
Stensel8 Sep 27, 2026
be63d84
Merge pull request #3 from Stensel8/docs/venv-first-install
Stensel8 Sep 27, 2026
689f6f7
fix(install): verify the install and warn about alias shadowing (#4)
Stensel8 Sep 27, 2026
1bc52ed
rename: CLI command is streamrip, not rip (#5)
Stensel8 Sep 27, 2026
4ab1e23
fix(install): show one activation line, not two; mention deactivate (#6)
Stensel8 Sep 27, 2026
35200d8
fix: artist download UX, Tidal rate limits, quality-downgrade warning…
Stensel8 Sep 27, 2026
185f8b7
fix(tidal): default quality to LOSSLESS, not best-available (#8)
Stensel8 Sep 27, 2026
afaeaeb
feat: improve artist sorting + add option to filter explicit tracks (#9)
Stensel8 Sep 28, 2026
46ebe7d
* feat: add `streamrip database clear`
Stensel8 Sep 28, 2026
c90570e
feat: hi-res Tidal, multi-value artist tags and a leaner codebase (#11)
Stensel8 Sep 28, 2026
6beeff4
chore: release 2.4.0
Stensel8 Sep 28, 2026
cd6e297
chore: bump user agent
Stensel8 Sep 28, 2026
9f883ea
feat: release 2.4.1, prefer_explicit on by default (#12)
Stensel8 Sep 28, 2026
0fd83a0
feat: release 2.4.2, sequential progress display and Tidal deduping
Stensel8 Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ body:
label: Command Used
description: |
The command that you typed that caused the error
placeholder: e.g. rip url https://example.com
placeholder: e.g. streamrip url https://example.com
render: "bash"

- type: textarea
Expand All @@ -37,8 +37,8 @@ body:
label: Debug Traceback
description: |
Run your command with the `-vvv` option and paste the output here.
For example, if the problematic command was `rip url https://example.com`, then
you would run `rip -vvv url https://example.com` to get the debug logs.
For example, if the problematic command was `streamrip url https://example.com`, then
you would run `streamrip -vvv url https://example.com` to get the debug logs.
Make sure to check the logs for any personal information such as emails and remove them.
render: "text"
placeholder: Logs printed to terminal screen
Expand All @@ -49,7 +49,7 @@ body:
attributes:
label: Config File
description: |
Find the config file using `rip config open` and paste the contents here.
Find the config file using `streamrip config open` and paste the contents here.
Make sure you REMOVE YOUR CREDENTIALS!
render: toml
placeholder: Contents of config.toml
Expand All @@ -66,7 +66,7 @@ body:
required: true
attributes:
label: streamrip version
description: Run `rip --version` to check.
description: Run `streamrip --version` to check.
placeholder: e.g. 1.5

- type: textarea
Expand Down
31 changes: 31 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Dependabot handles security updates; Renovate (renovate.json) handles the
# regular version updates, SHA pinning and lock file maintenance. Keeping the
# version updates in one tool avoids two PRs for every release.
#
# open-pull-requests-limit: 0 turns Dependabot's version updates off without
# affecting security updates (enable "Dependabot security updates" in the
# repository settings under Code security). Raise the limit to let Dependabot
# open version updates as well.
version: 2
updates:
- package-ecosystem: pip
directory: "/"
target-branch: dev
schedule:
interval: weekly
timezone: Europe/Amsterdam
open-pull-requests-limit: 0
labels: ["dependencies", "python"]
commit-message:
prefix: "fix(deps)"

- package-ecosystem: github-actions
directory: "/"
target-branch: dev
schedule:
interval: weekly
timezone: Europe/Amsterdam
open-pull-requests-limit: 0
labels: ["dependencies", "github-actions"]
commit-message:
prefix: "ci(deps)"
59 changes: 59 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: CI

on:
push:
branches: [dev, main]
pull_request:

permissions:
contents: read

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.14"
- run: python -m pip install ruff
- run: ruff check .
- run: ruff format --check .

test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.14"
- name: Install Poetry
run: python -m pip install "poetry>=2.1,<3"
- name: Check that poetry.lock matches pyproject.toml
run: poetry check --lock
- name: Install dependencies
run: poetry install --no-interaction --all-extras
- name: Run tests
run: poetry run pytest

# Installing the way users do: plain pip, on every platform.
install:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.14"
- run: python -m pip install .
- run: streamrip --version
- run: streamrip --help
71 changes: 0 additions & 71 deletions .github/workflows/codeql-analysis.yml

This file was deleted.

23 changes: 0 additions & 23 deletions .github/workflows/poetry-publish.yml

This file was deleted.

41 changes: 0 additions & 41 deletions .github/workflows/pytest.yml

This file was deleted.

28 changes: 28 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Builds the wheel and sdist for a published GitHub release and attaches them
# to it. The "streamrip" name on PyPI belongs to upstream, so this fork is
# installed from GitHub instead (see the README).
name: Release

on:
release:
types: [published]

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.14"
- run: python -m pip install build
- run: python -m build
- name: Attach to the release
env:
GH_TOKEN: ${{ github.token }}
run: gh release upload "${{ github.event.release.tag_name }}" dist/* --clobber --repo "${{ github.repository }}"
11 changes: 0 additions & 11 deletions .github/workflows/ruff.yml

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ StreamripDownloads
/.mypy_cache
.DS_Store
pyrightconfig.json
.venv/
Loading