Skip to content

Conversation

bdim404
Copy link
Contributor

@bdim404 bdim404 commented Aug 11, 2025

This PR introduces the gamdl package.

gamdl is a command-line tool for downloading songs, albums, playlists, and music videos from Apple Music. It automatically embeds metadata, lyrics, and cover art into the downloaded files. This is useful for users who want to maintain an offline backup of their Apple Music library.

Homepage: https://github.com/glomatico/gamdl

Things done

  • Built on platform:
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • Tested, as applicable:
  • Ran nixpkgs-review on this PR. See nixpkgs-review usage.
  • Tested basic functionality of all binary files, usually in ./result/bin/.
  • Nixpkgs Release Notes
    • Package update: when the change is major or breaking.
  • NixOS Release Notes
    • Module addition: when adding a new NixOS module.
    • Module update: when the change is significant.
  • Fits CONTRIBUTING.md, pkgs/README.md, maintainers/README.md and other READMEs.

Add a 👍 reaction to pull requests you find important.

@nixpkgs-ci nixpkgs-ci bot added 10.rebuild-linux: 1-10 This PR causes between 1 and 10 packages to rebuild on Linux. 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-darwin: 1 This PR causes 1 package to rebuild on Darwin. 10.rebuild-linux: 1 This PR causes 1 package to rebuild on Linux. 8.has: maintainer-list (update) This PR changes `maintainers/maintainer-list.nix` 9.needs: reviewer This PR currently has no reviewers requested and needs attention. labels Aug 11, 2025
@bdim404 bdim404 changed the title gamdl: init at 2.2.3 gamdl: init at 2.5.1 Aug 11, 2025
@bdim404
Copy link
Contributor Author

bdim404 commented Aug 11, 2025

nixpkgs-review result

Generated using nixpkgs-review.

Command: nixpkgs-review pr 432872
Commit: e95b7c7e22c43afbbb2b132a0127f895012ca806


x86_64-linux

✅ 2 packages built:
  • gamdl
  • gamdl.dist

@nixpkgs-ci nixpkgs-ci bot removed the 9.needs: reviewer This PR currently has no reviewers requested and needs attention. label Aug 11, 2025
@nix-owners nix-owners bot requested a review from natsukium August 12, 2025 03:00
@nixpkgs-ci nixpkgs-ci bot added 6.topic: python Python is a high-level, general-purpose programming language. and removed 10.rebuild-darwin: 1 This PR causes 1 package to rebuild on Darwin. 10.rebuild-linux: 1 This PR causes 1 package to rebuild on Linux. labels Aug 12, 2025
@bdim404
Copy link
Contributor Author

bdim404 commented Aug 12, 2025

I believe I have made all the changes you requested. Are there any other issues?

@Sigmanificient
Copy link
Member

Sigmanificient commented Aug 12, 2025

Missing flit-core import in pywidevine (we are almost there 😅)

@bdim404
Copy link
Contributor Author

bdim404 commented Aug 12, 2025

I apologize, but I am feeling quite overwhelmed at the moment. I will organize my thoughts and request your review once I have done so.

@bdim404
Copy link
Contributor Author

bdim404 commented Aug 12, 2025

Dear @Sigmanificient Actually, I'm not very familiar with how to integrate Python modules into nixpkgs. Currently, the files in the latest commit version can be successfully built on my local machine, but the built files cannot be executed smoothly. Could you please help me with this?

@bdim404 bdim404 requested a review from Sigmanificient August 12, 2025 05:56
bdim404 and others added 3 commits August 12, 2025 09:27
Co-authored-by: Yohann Boniface <edhyjox@gmail.com>
Co-authored-by: Yohann Boniface <edhyjox@gmail.com>
Copy link
Member

@Sigmanificient Sigmanificient left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bdim404 I tried to cleanup a bit the pr for you. Unfortunately, pymp4 tests are still failing. After some investigation, this is caused by construct dependency, being not compatible with the one expected. There is a pr that tries to upgrade from Construct 2.8.8 to 2.10.68, but it seems that more work it needed to make it work with python 3.13

@bdim404
Copy link
Contributor Author

bdim404 commented Aug 12, 2025

Thank you very much for your help! In your opinion, how should this situation be handled and resolved?

@Sigmanificient
Copy link
Member

Well a patch that makes pymp4 works properly with the latest version of constructs would be great

@bdim404
Copy link
Contributor Author

bdim404 commented Aug 12, 2025

However, it appears that the upstream you mentioned has not been updated for quite some time. I am uncertain when they will be able to merge...

@bdim404
Copy link
Contributor Author

bdim404 commented Aug 12, 2025

Well a patch that makes pymp4 works properly with the latest version of constructs would be great

Is it ok if we submit a patch pr upstream that can be used without waiting for merge and then used in nixpkgs?

@yzhou216
Copy link
Contributor

nixpkgs-review result

Generated using nixpkgs-review-gha

Command: nixpkgs-review pr 432872

Logs: https://github.com/yzhou216/nixpkgs-review-gha/actions/runs/16929501382


x86_64-linux

❌ 10 packages failed to build:
  • gamdl
  • gamdl.dist
  • python312Packages.pymp4
  • python312Packages.pymp4.dist
  • python312Packages.pywidevine
  • python312Packages.pywidevine.dist
  • python313Packages.pymp4
  • python313Packages.pymp4.dist
  • python313Packages.pywidevine
  • python313Packages.pywidevine.dist

Error logs: `x86_64-linux`
python312Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/ixf7d37d5f44yqq9z6b5cgc4gmbznbx8-python3.12-pymp4-1.4.0/lib/python3.12/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.28s ===============================
python313Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/6p3ksf61r5lg11dzjq9sjcax20g1cglv-python3.13-pymp4-1.4.0/lib/python3.13/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.29s ===============================

aarch64-linux

❌ 10 packages failed to build:
  • gamdl
  • gamdl.dist
  • python312Packages.pymp4
  • python312Packages.pymp4.dist
  • python312Packages.pywidevine
  • python312Packages.pywidevine.dist
  • python313Packages.pymp4
  • python313Packages.pymp4.dist
  • python313Packages.pywidevine
  • python313Packages.pywidevine.dist

Error logs: `aarch64-linux`
python312Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/c4s9qf7plccbnb74qba36wv554xsfhc5-python3.12-pymp4-1.4.0/lib/python3.12/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.13s ===============================
python313Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/w7di7663idzpr8ry4rf1j1h0h4i0r1ip-python3.13-pymp4-1.4.0/lib/python3.13/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.13s ===============================

x86_64-darwin (sandbox = true)

❌ 10 packages failed to build:
  • gamdl
  • gamdl.dist
  • python312Packages.pymp4
  • python312Packages.pymp4.dist
  • python312Packages.pywidevine
  • python312Packages.pywidevine.dist
  • python313Packages.pymp4
  • python313Packages.pymp4.dist
  • python313Packages.pywidevine
  • python313Packages.pywidevine.dist

Error logs: `x86_64-darwin`
python312Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/gadlnznb1x4hks5j8nk1yhhc5yhbvf36-python3.12-pymp4-1.4.0/lib/python3.12/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.47s ===============================
python313Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/k0qyg7m7nv2xbr5992rhsjg8m5canjx8-python3.13-pymp4-1.4.0/lib/python3.13/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.42s ===============================

aarch64-darwin (sandbox = true)

❌ 10 packages failed to build:
  • gamdl
  • gamdl.dist
  • python312Packages.pymp4
  • python312Packages.pymp4.dist
  • python312Packages.pywidevine
  • python312Packages.pywidevine.dist
  • python313Packages.pymp4
  • python313Packages.pymp4.dist
  • python313Packages.pywidevine
  • python313Packages.pywidevine.dist

Error logs: `aarch64-darwin`
python312Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/fjcdyylc6rv5xkpw3sn2fcdj46rxrkd2-python3.12-pymp4-1.4.0/lib/python3.12/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.12s ===============================
python313Packages.pymp4
E   NameError: name 'String' is not defined
_____________________ ERROR collecting tests/test_util.py ______________________
tests/test_util.py:28: in 
    class BoxTests(unittest.TestCase):
tests/test_util.py:30: in BoxTests
    Container(type=b"a   ")(id=1),
E   TypeError: 'Container' object is not callable
_________________ ERROR collecting tests/test_webvtt_boxes.py __________________
tests/test_webvtt_boxes.py:6: in 
    from pymp4.parser import Box
/nix/store/m855dihr4inqrmgaicisa0frm33bqiyn-python3.13-pymp4-1.4.0/lib/python3.13/site-packages/pymp4/parser.py:87: in 
    "major_brand" / String(4),
E   NameError: name 'String' is not defined
=========================== short test summary info ============================
ERROR tests/test_box.py - NameError: name 'String' is not defined
ERROR tests/test_dashboxes.py - NameError: name 'String' is not defined
ERROR tests/test_util.py - TypeError: 'Container' object is not callable
ERROR tests/test_webvtt_boxes.py - NameError: name 'String' is not defined
!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 4 errors in 0.11s ===============================

Co-authored-by: Yiyu Zhou <yiyuzhou19@gmail.com>
@bdim404
Copy link
Contributor Author

bdim404 commented Aug 13, 2025

@bdim404 I tried to cleanup a bit the pr for you. Unfortunately, pymp4 tests are still failing. After some investigation, this is caused by construct dependency, being not compatible with the one expected. There is beardypig/pymp4#24, but it seems that more work it needed to make it work with python 3.13

@Stzx @yzhou216 You can find here.

and

a patch that makes pymp4 works properly with the latest version of constructs would be great

@bdim404 bdim404 requested review from yzhou216 and Stzx August 13, 2025 06:49
@yzhou216
Copy link
Contributor

Could you please do a rebase to squash e2bd184 into f3e1e8d?

@bdim404
Copy link
Contributor Author

bdim404 commented Aug 13, 2025

Could you please do a rebase to squash e2bd184 into f3e1e8d?

Yes, but it doesn't make much sense.

@yzhou216
Copy link
Contributor

Could you please do a rebase to squash e2bd184 into f3e1e8d?

Yes, but it doesn't make much sense.

Why not? The suggestion I made was to a file added in a previous commit.

@bdim404
Copy link
Contributor Author

bdim404 commented Aug 13, 2025

Could you please do a rebase to squash e2bd184 into f3e1e8d?

Yes, but it doesn't make much sense.

Why not? The suggestion I made was to a file added in a previous commit.

Currently, pymp4 is unavailable, and we still need to make changes. Won't we need to rebase again? Wouldn't it be better to organize the commits after we can run it?

@yzhou216
Copy link
Contributor

Could you please do a rebase to squash e2bd184 into f3e1e8d?

Yes, but it doesn't make much sense.

Why not? The suggestion I made was to a file added in a previous commit.

Currently, pymp4 is unavailable, and we still need to make changes. Won't we need to rebase again? Wouldn't it be better to organize the commits after we can run it?

That's up to you. Although I do think rebasing it right now is better since the commit message is very generic, and it's harder to track which commit did what once commits get built up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: python Python is a high-level, general-purpose programming language. 8.has: maintainer-list (update) This PR changes `maintainers/maintainer-list.nix` 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-linux: 1-10 This PR causes between 1 and 10 packages to rebuild on Linux.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants