BUG: Mutagen ID3 No header error

When running the program i get an error from mutagen. I have looked around but could not find any related issues:
> $ spotdl https://open.spotify.com/track/398P1VKJo9gJQFZpY3vt8T?si=e_T_AWLySpGDWMMfV-zSBQ
Fetching Song...                                                                  95%|███████████████████████████████████████████████▍  |ETA: 00:00, 0.09min/songTraceback (most recent call last):   File "/home/sjoerdhilhorst/.local/bin/spotdl", line 8, in <module>     sys.exit(console_entry_point())   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/spotdl/__main__.py", line 100, in console_entry_point     downloader.download_single_song(song)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/spotdl/download/downloader.py", line 274, in download_single_song     download_song(songObj, self.displayManager, self.downloadTracker)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/spotdl/download/downloader.py", line 170, in download_song     audioFile = EasyID3(convertedFilePath)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/mutagen/easyid3.py", line 169, in __init__     self.load(filename)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/mutagen/_util.py", line 185, in wrapper     return func(*args, **kwargs)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/mutagen/_util.py", line 156, in wrapper     return func(self, h, *args, **kwargs)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/mutagen/id3/_file.py", line 152, in load     self._header = ID3Header(fileobj)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/mutagen/_util.py", line 185, in wrapper     return func(*args, **kwargs)   File "/home/sjoerdhilhorst/.local/lib/python3.6/site-packages/mutagen/id3/_tags.py", line 59, in __init__     raise ID3NoHeaderError("%s: too small" % fn) mutagen.id3._util.ID3NoHeaderError: ./Yotto - Marisa.mp3: too small
Any ideas?  i can't find much documentation on what the cause of this exception is

I tired downloading the same song, no issues here.
Try the following:

pip install pip-autoremove
pip-autoremove spotdl
pip install spotdl
spotdl https://open.spotify.com/track/398P1VKJo9gJQFZpY3vt8T?si=e_T_AWLySpGDWMMfV-zSBQ

Followed the steps, tried it for multiple songs. Still the same issue persists. A temp folder with mp4 file of the song is generated and an empy mp3 file is also instantiated.

And the progress bar goes till 100%?

It goes to 95%. When running the download again with the tracking file it goes to 100% without any errors but the mp3 file is still empty.

Could you open an issue at quodlibet/mutagen? They're more well versed with the library. IRS be much more simpler that me relaying info b/w you and them

Hello, just so you know, you're not alone. Just installed the latest release and I'm experiencing exactly the same issue on Debian 10 Buster stable on a fresh new VPS.

Also experiencing this, have followed the reinstallation instructions that @Mikhail-Zex posted earlier.

Try this change and post the result please
https://github.com/quodlibet/mutagen/issues/502#issuecomment-719456377

@Mikhail-Zex The Issues is with FFMPEG not converting the .mp4 Downloaded with Pytube to Mp3 returning 0 byte File. So Mutagen see no Mp3 Header.

The question becomes why is ffmpeg not converting? We all run the same version for ffmpeg (stable build) and most users don't have this issue on win, mac, linux.
@kingy99 any idea what's triggering the ffmpeg error?

Make sure you're running 4.3.1 While Running Old Version of FFMPEG had issues with conversion till i install 4.3.1

command = 'ffmpeg -v quiet -y -i "%s" -acodec libmp3lame -abr true -af "apad=pad_dur=2, dynaudnorm, loudnorm=I=-17" "%s"' This code might not be supported by some versions of ffmpeg

@Mikhail-Zex

Well, there is no dynaudnorm,
And I am running the latest version from the official build page. It works fine for me and most others but some have issues.

It definitely isn't related to the ffmpeg version since this works for the base build of ffmpeg from v4 onwards

@kingy99

It's definitely not mutagen. When i had issues with old ffmpeg version the only thing i did to fix it is to Update the version of Ffpeg

Change the ffmpeg log-level to debug or error to check what goes wrong

@Silverarmor @SjoerdHilhorst @pianographe
could you guys grab a generic .mp4 file and run this command:
ffmpeg -v debug -y -i "$input.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, loudnorm=I=-17 "output.mp3"
where the input file is any mp4 file and the output file is $randomName.mp3

https://hastebin.com/ubexalezeb.yaml
This paste ommits a bunch of lines similar to
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000024f4aed9f80] stts: 63734671 ctts: 1001, ctts_index: 63671, ctts_count: 63678

https://hastebin.com/ubexalezeb.yaml
This paste ommits a bunch of lines similar to
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000024f4aed9f80] stts: 63734671 ctts: 1001, ctts_index: 63671, ctts_count: 63678

What was the command you ran? There's no output file specified acc to the log.

I ran ffmpeg -v debug -y -i "TPO.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, loudnorm=I=-17 "output.mp3"
Where my file name was TOP.mp4. There was a massive stream of text/data that filled my screen, which I was unable to upload (due to size) to any paste software, and it had even sent the ran command out of the cmd window.

There is a noice shortcut to bypass taht problem.
Run ffmpeg -v debug -y -i "TPO.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, loudnorm=I=-17 "output.mp3" 2> log.txt, Pass on the log.txt file.

There is a noice shortcut to bypass taht problem.
Run ffmpeg -v error-y -i "TPO.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, loudnorm=I=-17 "output.mp3" 2> log.txt, Pass on the log.txt file.

Invalid loglevel "error-y". Possible levels are numbers or:
"quiet"
"panic"
"fatal"
"error"
"warning"
"info"
"verbose"
"debug"
"trace"

There is a noice shortcut to bypass taht problem.
Run ffmpeg -v error-y -i "TPO.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, loudnorm=I=-17 "output.mp3" 2> log.txt, Pass on the log.txt file.

Invalid loglevel "error-y". Possible levels are numbers or:
"quiet"
"panic"
"fatal"
"error"
"warning"
"info"
"verbose"
"debug"
"trace"

I tried running
ffmpeg -v debug -i "TPO.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, loudnorm=I=-17 "output.mp3" 2> log.txt
but have not got a log file.
just realised it was a 40 minute file I was testing on. Will try on a shorter one soon.

Run it os PS, not CMD, it works. Just checked.

$ ffmpeg -v debug -y -i "/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, dynaudnorm, loudnorm=I=-17" "./Fritz Kalkbrenner - Ride1.mp3"
ffmpeg version n4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable-libdrm --enable-ffplay --enable-gnutls --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with argument 'debug'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '-i' ... matched as input url with argument '/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4'.
Reading option '-acodec' ... matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'libmp3lame'.
Reading option '-abr' ... matched as AVOption 'abr' with argument 'true'.
Reading option '-af' ... matched as option 'af' (set audio filters) with argument 'apad=pad_dur=2, dynaudnorm, loudnorm=I=-17'.
Reading option './Fritz Kalkbrenner - Ride1.mp3' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument debug.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url /home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4.
Successfully parsed a group of options.
Opening an input file: /home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4.
[NULL @ 0x55e5ba63d080] Opening '/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4' for reading
[file @ 0x55e5ba63db80] Setting default whitelist 'file,crypto'
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e5ba63d080] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e5ba63d080] ISO: File Type Major Brand: dash
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e5ba63d080] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e5ba63d080] found sidx time -9223372036854775808, using it for pts
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e5ba63d080] Before avformat_find_stream_info() pos: 2648 bytes read:32768 seeks:0 nb_streams:1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e5ba63d080] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e5ba63d080] After avformat_find_stream_info() pos: 3012 bytes read:32768 seeks:0 frames:1
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6mp41
    creation_time   : 2018-03-14T19:17:50.000000Z
  Duration: 00:07:16.30, start: 0.000000, bitrate: 127 kb/s
    Stream #0:0(und), 1, 1/44100: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 1 kb/s (default)
    Metadata:
      creation_time   : 2018-03-14T19:17:50.000000Z
      handler_name    : SoundHandler
Successfully opened the file.
Parsing a group of options: output url ./Fritz Kalkbrenner - Ride1.mp3.
Applying option acodec (force audio codec ('copy' to copy stream)) with argument libmp3lame.
Applying option af (set audio filters) with argument apad=pad_dur=2, dynaudnorm, loudnorm=I=-17.
Successfully parsed a group of options.
Opening an output file: ./Fritz Kalkbrenner - Ride1.mp3.
[file @ 0x55e5ba6576c0] Setting default whitelist 'file,crypto'
Successfully opened the file.
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
detected 8 logical cores
[Parsed_apad_0 @ 0x55e5ba73c0c0] Setting 'pad_dur' to value '2'
[Parsed_apad_0 @ 0x55e5ba73c0c0] Option 'pad_dur' not found
[AVFilterGraph @ 0x55e5ba666a40] Error initializing filter 'apad' with args 'pad_dur=2'
Error reinitializing filters!
Failed to inject frame into filter network: Option not found
Error while processing the decoded data for stream #0:0
[AVIOContext @ 0x55e5ba651ac0] Statistics: 0 seeks, 0 writeouts
[AVIOContext @ 0x55e5ba646040] Statistics: 32768 bytes read, 0 seeks
Conversion failed!

removed apad=pad_dur=2 and the conversion worked

Ok, thanks for the heads up, I'll check if it can be removed

apad=pad_dur=2 adds 2 seconds at the end as normalization sometimes 'cuts out' the last 2-3 seconds of the song (especially Edm songs)
@SjoerdHilhorst, try removing dynaudnorm instead. Please post the output here.

I ran this command also without any errors
$ ffmpeg -v debug -y -i "/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4" -acodec libmp3lame -abr true -af "dynaudnorm, loudnorm=I=-17" "./Fritz Kalkbrenner - Ride1.mp3"

See, dynaudnorm should not be there it deadens the music. Try running it without dynaudnorm. That would be a great help.

oh damn, completely misread it and ran the wrong command, here is the right one. It returns the same error
$ ffmpeg -v debug -y -i "/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4" -acodec libmp3lame -abr true -af "apad=pad_dur=2, loudnorm=I=-17" "./Fritz Kalkbrenner - Ride1.mp3"
ffmpeg version n4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable-libdrm --enable-ffplay --enable-gnutls --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with argument 'debug'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '-i' ... matched as input url with argument '/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4'.
Reading option '-acodec' ... matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'libmp3lame'.
Reading option '-abr' ... matched as AVOption 'abr' with argument 'true'.
Reading option '-af' ... matched as option 'af' (set audio filters) with argument 'apad=pad_dur=2, loudnorm=I=-17'.
Reading option './Fritz Kalkbrenner - Ride1.mp3' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument debug.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url /home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4.
Successfully parsed a group of options.
Opening an input file: /home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4.
[NULL @ 0x5566018d8080] Opening '/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4' for reading
[file @ 0x5566018d8b80] Setting default whitelist 'file,crypto'
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5566018d8080] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5566018d8080] ISO: File Type Major Brand: dash
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5566018d8080] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5566018d8080] found sidx time -9223372036854775808, using it for pts
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5566018d8080] Before avformat_find_stream_info() pos: 2648 bytes read:32768 seeks:0 nb_streams:1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5566018d8080] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5566018d8080] After avformat_find_stream_info() pos: 3012 bytes read:32768 seeks:0 frames:1
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/sjoerdhilhorst/Documents/persoonlijk/songs/./Temp/Fritz Kalkbrenner - Ride.mp4':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6mp41
    creation_time   : 2018-03-14T19:17:50.000000Z
  Duration: 00:07:16.30, start: 0.000000, bitrate: 127 kb/s
    Stream #0:0(und), 1, 1/44100: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 1 kb/s (default)
    Metadata:
      creation_time   : 2018-03-14T19:17:50.000000Z
      handler_name    : SoundHandler
Successfully opened the file.
Parsing a group of options: output url ./Fritz Kalkbrenner - Ride1.mp3.
Applying option acodec (force audio codec ('copy' to copy stream)) with argument libmp3lame.
Applying option af (set audio filters) with argument apad=pad_dur=2, loudnorm=I=-17.
Successfully parsed a group of options.
Opening an output file: ./Fritz Kalkbrenner - Ride1.mp3.
[file @ 0x5566018f26c0] Setting default whitelist 'file,crypto'
Successfully opened the file.
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
detected 8 logical cores
[Parsed_apad_0 @ 0x556601902d00] Setting 'pad_dur' to value '2'
[Parsed_apad_0 @ 0x556601902d00] Option 'pad_dur' not found
[AVFilterGraph @ 0x5566018eea00] Error initializing filter 'apad' with args 'pad_dur=2'
Error reinitializing filters!
Failed to inject frame into filter network: Option not found
Error while processing the decoded data for stream #0:0
[AVIOContext @ 0x5566018ecac0] Statistics: 0 seeks, 0 writeouts
[AVIOContext @ 0x5566018e1040] Statistics: 32768 bytes read, 0 seeks
Conversion failed!

@Mikhail-Zex  I have resolved this issue by uninstalling ffmpeg, and reinstalling & re-adding to path.
To others, ensure you are getting ffmpeg from https://www.gyan.dev/ffmpeg/builds/, not ffmpeg.org

Tnx for the update. Do ya wanna help on spotDL dev?

@SjoerdHilhorst could you try what @Silverarmor suggested

Tnx for the update. Do ya wanna help on spotDL dev?

@Mikhail-Zex If you could elaborate?

Join the dev team, code occasionally, t reply to issues kinda thing.

Yes I'd be happy to help out where I can. I've been using spotDL for ages and am happy to give back.

I'll send you a invite by evening

I currently just use this command in downloader.py
command = 'ffmpeg -v quiet -y -i "%s" -acodec libmp3lame -abr true -af loudnorm=I=-17 "%s"'
and works. Any reasons this wouldn't be optimal, otherwise will just keep using this and it's fine

Try a couple of edm songs, is the ends don't get lopped off, open a PR.

I'll send you a invite by evening

👀

I'll send you a invite by evening

@Mikhail-Zex  👀

You didn't get it?

Did not receive anything. Where was it supposed to come to? @Mikhail-Zex

@Mikhail-Zex

I think this issue can be closed, seems everyone has been resolved
still awaiting an invite/similar for helping on dev haha

Did not receive anything. Where was it supposed to come to? @Mikhail-Zex

Actually check again. It shows that the invite has been sent. I'm not sure where you'll find it. I think you'll see it under notifications and also in your email. I deleted your old invite and sent ya a new one.

@Mikhail-Zex Received.
Reminder to unpin this issue :)

So I'm confused. What was the solution? I am getting the issue.

So I'm confused. What was the solution? I am getting the issue.

Here is my output. At least I think it's the same issue.
spotdl https://open.spotify.com/track/08phoHar5Ns28HdeKUkTj6?si=rT8TpuuFRuGQ1-0w52I3Iw
Fetching Song...
Searching for: 妖精帝國 - 濫觴永遠
 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊        |ETA: 00:00, 0.03min/songTraceback (most recent call last):
  File "/home/zarafat/.local/bin/spotdl", line 10, in <module>
    sys.exit(console_entry_point())
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/__main__.py", line 96, in console_entry_point
    downloader.download_single_song(song)
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 74, in download_single_song
    self._download_asynchronously([songObj])
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 355, in _download_asynchronously
    self.loop.run_until_complete(asyncio.gather(*tasks))
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 350, in _pool_download
    return await self.download_song(song_obj)
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 247, in download_song
    self.set_id3_data(convertedFilePath, songObj)
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 264, in set_id3_data
    audioFile = EasyID3(convertedFilePath)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/easyid3.py", line 169, in __init__
    self.load(filename)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/_util.py", line 156, in wrapper
    return func(self, h, *args, **kwargs)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/id3/_file.py", line 152, in load
    self._header = ID3Header(fileobj)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/id3/_tags.py", line 59, in __init__
    raise ID3NoHeaderError("%s: too small" % fn)
mutagen.id3._util.ID3NoHeaderError: 妖精帝國 - 濫觴永遠.mp3: too small
Exception ignored in: <function tqdm.__del__ at 0x7f158bdc1268>
Traceback (most recent call last):
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1134, in __del__
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1281, in close
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1467, in display
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1137, in __repr__
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/progressHandlers.py", line 23, in format_dict
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1424, in format_dict
TypeError: cannot unpack non-iterable NoneType object

Here is my output. At least I think it's the same issue.
spotdl https://open.spotify.com/track/08phoHar5Ns28HdeKUkTj6?si=rT8TpuuFRuGQ1-0w52I3Iw
Fetching Song...
Searching for: 妖精帝國 - 濫觴永遠
 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊        |ETA: 00:00, 0.03min/songTraceback (most recent call last):
  File "/home/zarafat/.local/bin/spotdl", line 10, in <module>
    sys.exit(console_entry_point())
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/__main__.py", line 96, in console_entry_point
    downloader.download_single_song(song)
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 74, in download_single_song
    self._download_asynchronously([songObj])
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 355, in _download_asynchronously
    self.loop.run_until_complete(asyncio.gather(*tasks))
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 350, in _pool_download
    return await self.download_song(song_obj)
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 247, in download_song
    self.set_id3_data(convertedFilePath, songObj)
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/downloader.py", line 264, in set_id3_data
    audioFile = EasyID3(convertedFilePath)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/easyid3.py", line 169, in __init__
    self.load(filename)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/_util.py", line 156, in wrapper
    return func(self, h, *args, **kwargs)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/id3/_file.py", line 152, in load
    self._header = ID3Header(fileobj)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/home/zarafat/.local/lib/python3.7/site-packages/mutagen/id3/_tags.py", line 59, in __init__
    raise ID3NoHeaderError("%s: too small" % fn)
mutagen.id3._util.ID3NoHeaderError: 妖精帝國 - 濫觴永遠.mp3: too small
Exception ignored in: <function tqdm.__del__ at 0x7f158bdc1268>
Traceback (most recent call last):
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1134, in __del__
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1281, in close
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1467, in display
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1137, in __repr__
  File "/home/zarafat/.local/lib/python3.7/site-packages/spotdl/download/progressHandlers.py", line 23, in format_dict
  File "/home/zarafat/.local/lib/python3.7/site-packages/tqdm/std.py", line 1424, in format_dict
TypeError: cannot unpack non-iterable NoneType object

@RustyRaptor Try cleanly re-install spotDL:
Try the following:

pip install pip-autoremove
pip-autoremove spotdl
pip cache purge
pip install spotdl

@RustyRaptor Try cleanly re-install spotDL:
Try the following:

pip install pip-autoremove
pip-autoremove spotdl
pip cache purge
pip install spotdl

Same problem here. I followed the steps to "cleanly re-install spotDL", and it didn't help.
$ spotdl https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b?si=1stnMF5GSdClnIEARnJiiQ
Fetching Song...
Searching for: The Weeknd - Blinding Lights
 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋          |ETA: 00:00, 0.07min/songTraceback (most recent call last):
  File "/usr/local/bin/spotdl", line 8, in <module>
    sys.exit(console_entry_point())
  File "/usr/local/lib/python3.7/dist-packages/spotdl/__main__.py", line 96, in console_entry_point
    downloader.download_single_song(song)
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 74, in download_single_song
    self._download_asynchronously([songObj])
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 355, in _download_asynchronously
    self.loop.run_until_complete(asyncio.gather(*tasks))
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 350, in _pool_download
    return await self.download_song(song_obj)
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 247, in download_song
    self.set_id3_data(convertedFilePath, songObj)
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 264, in set_id3_data
    audioFile = EasyID3(convertedFilePath)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/easyid3.py", line 169, in __init__
    self.load(filename)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/_util.py", line 156, in wrapper
    return func(self, h, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/id3/_file.py", line 152, in load
    self._header = ID3Header(fileobj)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/id3/_tags.py", line 59, in __init__
    raise ID3NoHeaderError("%s: too small" % fn)
mutagen.id3._util.ID3NoHeaderError: The Weeknd - Blinding Lights.mp3: too small
Exception ignored in: <function tqdm.__del__ at 0x75787db0>
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1134, in __del__
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1281, in close
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1467, in display
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1137, in __repr__
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/progressHandlers.py", line 23, in format_dict
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1424, in format_dict
TypeError: cannot unpack non-iterable NoneType object

@Silverarmor  above says that we should get ffmpeg from the gyan.dev website, but that website is only for Windows. I'm running Raspian Linux on a Raspberry Pi.

Same problem here. I followed the steps to "cleanly re-install spotDL", and it didn't help.
$ spotdl https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b?si=1stnMF5GSdClnIEARnJiiQ
Fetching Song...
Searching for: The Weeknd - Blinding Lights
 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋          |ETA: 00:00, 0.07min/songTraceback (most recent call last):
  File "/usr/local/bin/spotdl", line 8, in <module>
    sys.exit(console_entry_point())
  File "/usr/local/lib/python3.7/dist-packages/spotdl/__main__.py", line 96, in console_entry_point
    downloader.download_single_song(song)
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 74, in download_single_song
    self._download_asynchronously([songObj])
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 355, in _download_asynchronously
    self.loop.run_until_complete(asyncio.gather(*tasks))
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 350, in _pool_download
    return await self.download_song(song_obj)
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 247, in download_song
    self.set_id3_data(convertedFilePath, songObj)
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/downloader.py", line 264, in set_id3_data
    audioFile = EasyID3(convertedFilePath)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/easyid3.py", line 169, in __init__
    self.load(filename)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/_util.py", line 156, in wrapper
    return func(self, h, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/id3/_file.py", line 152, in load
    self._header = ID3Header(fileobj)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/_util.py", line 185, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/mutagen/id3/_tags.py", line 59, in __init__
    raise ID3NoHeaderError("%s: too small" % fn)
mutagen.id3._util.ID3NoHeaderError: The Weeknd - Blinding Lights.mp3: too small
Exception ignored in: <function tqdm.__del__ at 0x75787db0>
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1134, in __del__
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1281, in close
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1467, in display
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1137, in __repr__
  File "/usr/local/lib/python3.7/dist-packages/spotdl/download/progressHandlers.py", line 23, in format_dict
  File "/usr/local/lib/python3.7/dist-packages/tqdm/std.py", line 1424, in format_dict
TypeError: cannot unpack non-iterable NoneType object

@Silverarmor  above says that we should get ffmpeg from the gyan.dev website, but that website is only for Windows. I'm running Raspian Linux on a Raspberry Pi.

@mikeblas
This error's really old. Join our discord and reach out there and we can talk more

What version of FFmpeg do you have? - Do you have the full build & latest?
Can you completely reinstall Python? - This solved the issue for some.

@mikeblas
This error's really old. Join our discord and reach out there and we can talk more

What version of FFmpeg do you have? - Do you have the full build & latest?
Can you completely reinstall Python? - This solved the issue for some.

This error's really old.

Not sure I follow -- seems like it's being pretty consistently reported; many  dupes to this item, and a similar report just 3 days ago.

Can you completely reinstall Python?

Is that a joke?

What version of FFmpeg do you have

$ ffmpeg -v
ffmpeg version 4.1.6-1~deb10u1+rpt1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)

This error's really old.

Not sure I follow -- seems like it's being pretty consistently reported; many  dupes to this item, and a similar report just 3 days ago.

Can you completely reinstall Python?

Is that a joke?

What version of FFmpeg do you have

$ ffmpeg -v
ffmpeg version 4.1.6-1~deb10u1+rpt1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)

No developer has been able to reproduce this error in recent versions of spotDL.

Try again to uninstall spotDL & all dependencies, then install with --no-cache-dir flag
Reinstall python - Something is clearly not working for you, since it works for the majority of other users.

No developer has been able to reproduce this error in recent versions of spotDL.

Try again to uninstall spotDL & all dependencies, then install with --no-cache-dir flag
Reinstall python - Something is clearly not working for you, since it works for the majority of other users.

I'm not the only person with this problem -- there are several reports in this issue, and several issues related to this one here.
Looking into the code around this code path, I think there are a couple of identifiable bugs that the team should consider addressing.
Around line 239 of downloader.py, we find this loop:
        #! Wait till converted file is actually created
        while True:
            if convertedFilePath.is_file():
                break

This loop will take 100% CPU while waiting for the file to be created. At least, it should sleep between iterations so CPU resources are available for the converter process -- or anything else the system is trying to run. Maybe there's a way to asynchronously await the arrival of the file.
But the other problem is that this loop releases when the file is created, not when it's completely written. I suspect the issue that your users are encountering are caused by a race condition where the file becomes visible, isn't completely written or flushed, but the spotDL tries to run the media converter on the file.
Just previous to this code, we find:
_ = await process.communicate()

and I'm not sure that works as intended, either. The call that creates the process doesn't set up stdin or stdout pipes, so I don't think there's any communicate() objects to await.

I'm not the only person with this problem -- there are several reports in this issue, and several issues related to this one here.
Looking into the code around this code path, I think there are a couple of identifiable bugs that the team should consider addressing.
Around line 239 of downloader.py, we find this loop:
        #! Wait till converted file is actually created
        while True:
            if convertedFilePath.is_file():
                break

This loop will take 100% CPU while waiting for the file to be created. At least, it should sleep between iterations so CPU resources are available for the converter process -- or anything else the system is trying to run. Maybe there's a way to asynchronously await the arrival of the file.
But the other problem is that this loop releases when the file is created, not when it's completely written. I suspect the issue that your users are encountering are caused by a race condition where the file becomes visible, isn't completely written or flushed, but the spotDL tries to run the media converter on the file.
Just previous to this code, we find:
_ = await process.communicate()

and I'm not sure that works as intended, either. The call that creates the process doesn't set up stdin or stdout pipes, so I don't think there's any communicate() objects to await.

Reviewing the code in download.py also reveals a failure to check returns codes from the spawned ffmpeg process, and that's the root cause of the problem I've encountered. If ffmpeg fails for any reason, the spotDL code will keep on working. If the output file isn't written, it ends up hanging with 100% CPU usage due the loop I quoted above.
For me, the issue is that I've got ffmpeg version 7:4.1.6-1 installed. This is the newest official version for the Raspberry Pi:
$ sudo apt install ffmpeg
Reading package lists... Done
Building dependency tree
Reading state information... Done
ffmpeg is already the newest version (7:4.1.6-1~deb10u1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

However, that version doesn't support the pad_dur option for the apad filter. spotDL passes this filter in the chian (as apad=pad_dur=2). ffmpeg fails, that failure isn't detected; ffmpeg writes a zero-byte output file, spotDL doesn't care to check, and crashes.
Getting a newer version of ffmpeg from snap exchanges this problem for another issue:
$ sudo snap install ffmpeg --classic
2021-01-25T15:54:27-08:00 INFO Waiting for restart...
ffmpeg N-76538-gb83c849 from Snapcrafters installed
Channel latest/stable for ffmpeg is closed; temporarily forwarding to stable.

because that version doesn't support the -abr option. I'll hve to find a way to get a version compatible with spotDL.
Until then, a raw Python stack dump is pretty harrowing for most users. Maybe the spotDL developers will consider any of these  suggestions to improve matters for their users:

Document the required version of ffmpeg as 4.2 or newer (when pad_dur support was added)
Check the ffmpeg version at startup; if older, omit the pad_dur parameter; perhaps with a warning message
add code that checks the process.returncode in download.py to see if the spawned process failed or worked; if it fails, do something sensible instead of trying to process a broken output file
catch the piped output from the process to develop a clear error message. ffmpeg shows the user an actionable error message
add a --debug option to the script to share more output

Reinstalling Python, as recommended above, won't fix this issue.

Reviewing the code in download.py also reveals a failure to check returns codes from the spawned ffmpeg process, and that's the root cause of the problem I've encountered. If ffmpeg fails for any reason, the spotDL code will keep on working. If the output file isn't written, it ends up hanging with 100% CPU usage due the loop I quoted above.
For me, the issue is that I've got ffmpeg version 7:4.1.6-1 installed. This is the newest official version for the Raspberry Pi:
$ sudo apt install ffmpeg
Reading package lists... Done
Building dependency tree
Reading state information... Done
ffmpeg is already the newest version (7:4.1.6-1~deb10u1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

However, that version doesn't support the pad_dur option for the apad filter. spotDL passes this filter in the chian (as apad=pad_dur=2). ffmpeg fails, that failure isn't detected; ffmpeg writes a zero-byte output file, spotDL doesn't care to check, and crashes.
Getting a newer version of ffmpeg from snap exchanges this problem for another issue:
$ sudo snap install ffmpeg --classic
2021-01-25T15:54:27-08:00 INFO Waiting for restart...
ffmpeg N-76538-gb83c849 from Snapcrafters installed
Channel latest/stable for ffmpeg is closed; temporarily forwarding to stable.

because that version doesn't support the -abr option. I'll hve to find a way to get a version compatible with spotDL.
Until then, a raw Python stack dump is pretty harrowing for most users. Maybe the spotDL developers will consider any of these  suggestions to improve matters for their users:

Document the required version of ffmpeg as 4.2 or newer (when pad_dur support was added)
Check the ffmpeg version at startup; if older, omit the pad_dur parameter; perhaps with a warning message
add code that checks the process.returncode in download.py to see if the spawned process failed or worked; if it fails, do something sensible instead of trying to process a broken output file
catch the piped output from the process to develop a clear error message. ffmpeg shows the user an actionable error message
add a --debug option to the script to share more output

Reinstalling Python, as recommended above, won't fix this issue.

Thanks @mikeblas for the great input. I think that we can apply your suggestions, but that can take some time.
The await process.communicate() waits for the process to finish, it doesn't matter that the streams are not piped, this code doesn't care about them as the output is assigned to _. The only purpose of this code is to hold the execution until the process finish. The communicate() method is better than wait() as the later deadlocks when streams are piped. I prefer to always use communicate() to avoid weird problems in the future if someone will pipe any stream.
The while loop, however, is weird. I've also got bitten by it - when ffmpeg didn't create a file for any reason, the application got stuck. I'm pretty sure we shouldn't enter this part if ffmpeg exits with non-zero code.
I don't know anything about ffmpeg, but your suggestion to adjust the pad_dur parameter makes sense - I'll let other folks, who know ffmpeg better decide here.
I like the idea of adding --debug switch, as it may be very useful in the future.

Thanks @mikeblas for the great input. I think that we can apply your suggestions, but that can take some time.
The await process.communicate() waits for the process to finish, it doesn't matter that the streams are not piped, this code doesn't care about them as the output is assigned to _. The only purpose of this code is to hold the execution until the process finish. The communicate() method is better than wait() as the later deadlocks when streams are piped. I prefer to always use communicate() to avoid weird problems in the future if someone will pipe any stream.
The while loop, however, is weird. I've also got bitten by it - when ffmpeg didn't create a file for any reason, the application got stuck. I'm pretty sure we shouldn't enter this part if ffmpeg exits with non-zero code.
I don't know anything about ffmpeg, but your suggestion to adjust the pad_dur parameter makes sense - I'll let other folks, who know ffmpeg better decide here.
I like the idea of adding --debug switch, as it may be very useful in the future.

cc: @spotDL/contributors, @spotDL/joining-developers

cc: @spotDL/contributors, @spotDL/joining-developers

Reviewing the code in download.py also reveals a failure to check returns codes from the spawned ffmpeg process, and that's the root cause of the problem I've encountered. If ffmpeg fails for any reason, the spotDL code will keep on working. If the output file isn't written, it ends up hanging with 100% CPU usage due the loop I quoted above.
For me, the issue is that I've got ffmpeg version 7:4.1.6-1 installed. This is the newest official version for the Raspberry Pi:
$ sudo apt install ffmpeg
Reading package lists... Done
Building dependency tree
Reading state information... Done
ffmpeg is already the newest version (7:4.1.6-1~deb10u1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

However, that version doesn't support the pad_dur option for the apad filter. spotDL passes this filter in the chian (as apad=pad_dur=2). ffmpeg fails, that failure isn't detected; ffmpeg writes a zero-byte output file, spotDL doesn't care to check, and crashes.
Getting a newer version of ffmpeg from snap exchanges this problem for another issue:
$ sudo snap install ffmpeg --classic
2021-01-25T15:54:27-08:00 INFO Waiting for restart...
ffmpeg N-76538-gb83c849 from Snapcrafters installed
Channel latest/stable for ffmpeg is closed; temporarily forwarding to stable.

because that version doesn't support the -abr option. I'll hve to find a way to get a version compatible with spotDL.
Until then, a raw Python stack dump is pretty harrowing for most users. Maybe the spotDL developers will consider any of these suggestions to improve matters for their users:
* Document the required version of ffmpeg as 4.2 or newer (when `pad_dur` support was added)

* Check the ffmpeg version at startup; if older, omit the `pad_dur` parameter; perhaps with a warning message

* add code that checks the `process.returncode` in `download.py` to see if the spawned process failed or worked; if it fails, do something sensible instead of trying to process a broken output file

* catch the piped output from the process to develop a clear error message. `ffmpeg` shows the user an actionable error message

* add a `--debug` option to the script to share more output

Reinstalling Python, as recommended above, won't fix this issue.

I have the same issue and is caused by the same ffmpeg version on Debian 10.

Reviewing the code in download.py also reveals a failure to check returns codes from the spawned ffmpeg process, and that's the root cause of the problem I've encountered. If ffmpeg fails for any reason, the spotDL code will keep on working. If the output file isn't written, it ends up hanging with 100% CPU usage due the loop I quoted above.
For me, the issue is that I've got ffmpeg version 7:4.1.6-1 installed. This is the newest official version for the Raspberry Pi:
$ sudo apt install ffmpeg
Reading package lists... Done
Building dependency tree
Reading state information... Done
ffmpeg is already the newest version (7:4.1.6-1~deb10u1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

However, that version doesn't support the pad_dur option for the apad filter. spotDL passes this filter in the chian (as apad=pad_dur=2). ffmpeg fails, that failure isn't detected; ffmpeg writes a zero-byte output file, spotDL doesn't care to check, and crashes.
Getting a newer version of ffmpeg from snap exchanges this problem for another issue:
$ sudo snap install ffmpeg --classic
2021-01-25T15:54:27-08:00 INFO Waiting for restart...
ffmpeg N-76538-gb83c849 from Snapcrafters installed
Channel latest/stable for ffmpeg is closed; temporarily forwarding to stable.

because that version doesn't support the -abr option. I'll hve to find a way to get a version compatible with spotDL.
Until then, a raw Python stack dump is pretty harrowing for most users. Maybe the spotDL developers will consider any of these suggestions to improve matters for their users:
* Document the required version of ffmpeg as 4.2 or newer (when `pad_dur` support was added)

* Check the ffmpeg version at startup; if older, omit the `pad_dur` parameter; perhaps with a warning message

* add code that checks the `process.returncode` in `download.py` to see if the spawned process failed or worked; if it fails, do something sensible instead of trying to process a broken output file

* catch the piped output from the process to develop a clear error message. `ffmpeg` shows the user an actionable error message

* add a `--debug` option to the script to share more output

Reinstalling Python, as recommended above, won't fix this issue.

I have the same issue and is caused by the same ffmpeg version on Debian 10.

I have the same issue and is caused by the same ffmpeg version on Debian 10.

How interesting. Why was it that no developer was able to reproduce this, then? Maybe their testing is very limited.

I have the same issue and is caused by the same ffmpeg version on Debian 10.

How interesting. Why was it that no developer was able to reproduce this, then?

There was a discussion about a FFmpeg version on our discord - Have a look there.

We have had multiple developers look at this issue, as evident by the replies. I implore you to show respect for the work we put in.

@mikeblas There's no need to be rude and speak down upon the developers who have put hundreds of hours of time into spotDL.

There was a discussion about a FFmpeg version on our discord - Have a look there.

We have had multiple developers look at this issue, as evident by the replies. I implore you to show respect for the work we put in.

Can we close this off? I don't believe it is an issue with SpotDL to begin with.

It is closed.

Can we close this off? I don't believe it is an issue with SpotDL to begin with.

Well, it kinda is. I mean, not directly but still - when you have "wrong" ffmpeg version spotdl behaves quite weird and there's no helpful feedback on what went wrong.
I think we should reopen it or at least extract @mikeblas comment to another issue.

If we knew why the devs weren't able to repro the issue, we'd probably gain some insight into why it affects some users and not others. "It works on my machine" doesn't make the product any better for anyone.

True but, we really can't deal with issues that affect few of out many users. Because we simple don't have the time to spare.

True but, we really can't deal with issues that affect few of out many users.

I think you might be under-estimating the number of users affected. Any user who has an error in the conversion process will exercise this code and get bad results. There are many reasons that ffmpeg might fail, and users will have a hard time figuring out what went wrong because the script will either hang or dump its stack in response to those problems.

and we have to prioritize.

Time is what prevents everything from happening at once. :) People understand that. The also understand that software sometimes has bugs.
So why not just tell them?
Why not acknowledge the issue: "Yeah, we could be better at error handling". Open an issue, track it, prioritize it with the other things going on, and get it fixed one day. Giving people advice about reinstalling things, or making excuses about "couldn't repro it", or dismissing an issue that's so obviously a bug in the script as not "an issue with SpotDL to begin with" are the actual causes of frustration here.
Good news: those actual causes are all easy to correct.
I hope you can accept my input in the spirit in which it intended, by the way -- otherwise, I guess I'll have to endure another ban.

Point taken.


Old and new regions for cases presents in estimates - UK

@kathsherratt could you flag the old depreciated UK regions that we should remove from the repository. At the moment they are shown on the website and in all downstream CSVs.
@joeHickson I think the best solution to this is to delete the folders for these regions in order to stop them appearing in the summaries.

Thanks for noticing this Sam, sorry I missed it.
For cases, deaths, and admissions, we need to remove:

Yorkshire and The Humber
North East
West Midlands
East Midlands

For admissions only, we need to remove:

United Kingdom

This is getting fairly urgent. Can anyone look at this please?
I see multiple regions being updated for deaths in a way that I don't understand:
https://github.com/epiforecasts/covid-rt-estimates/tree/master/subnational/united-kingdom/deaths/national
@kathsherratt are there duplicate regions in the data source?
I have removed the UK for admissions.

Certainly the list at the point it's passed to epinow 2 is different:
2020-10-14 01:01:11 INFO Producing estimates for: East of England, England, London, Midlands, North East and Yorkshire, North West, Northern Ireland, Scotland, South East, South West, Wales, United Kingdom
2020-10-15 00:59:27 INFO Producing estimates for: East Midlands, East of England, England, London, North East, North West, Northern Ireland, Scotland, South East, South West, Wales, West Midlands, Yorkshire and The Humber, United Kingdom

We don't have logging of what locations were in the original data.

Is it possible the data source has changed?

The data source seems fine, returning the correct geographies (4 nations + 7 NHS regions) with data present for the correct variables (cases_new, deaths_new, and hosp_new_blend).
data <- covidregionaldata::get_regional_data("uk", nhsregions = TRUE)
unique(data$region)

But it does look like the regions that are only brought in by using the nhsregion = TRUE argument (Midlands; North East & Yorkshire) haven't updated recently, at least for cases (last updated 2 days ago).
Has anything changed with the use of data_args in dataset-list.R? Could it be a change where the argument nhsregions = TRUE doesn't get passed through to covidregionaldata?

let see if that reoslves it

looks like some more bits might have gone astray with the problematic merge of #73


Sign APK with APK Signature V2 or higher

Hi,
I had migrate the app(Xamarin.Forms) from Android 9 to 12 but when I try to install the APK into device, fails with follow error:
ERROR: Target SDK version 31 requires a minimum of signature scheme v2; the APK is not signed with this or a later signature scheme
My question is: the Souyuz plugin is predisposed to sign the app with APK Signature V2 or higher ? Or I should change the property file in the project ?

I resolved this issue updating the plugin to last versione 0.11.1


Azure Kinect FAQs

We are planning to publishing an updated list of FAQs at https://azure.com/kinect.
Here is a current list of FAQs that we are gathering before updating the site. Please comment on this issue if you have suggestions for additional FAQs.
Frequently Asked Questions
What are the hardware specifications?
Hardware specifications are available at https://aka.ms/kinectdocs.
Can I find the relative position of two Azure Kinect devices?
This won't be part of the SDK, but we hope to provide examples on some techniques to do this.
What are the limits on how many devices can be synchronized?
It is recommended that you connect a maximum of 9 subordinate devices in daisychain configuration, or 3 subordinates in a star configuration.
How many devices can be connected to a single PC?
The CPU and GPU requirements are variable depending on the framerate and resolution of the device. The minimum spec for a PC ensures that one device running at its maximum framerate will function well. If devices are connected to separate USB root ports, and you have sufficient resources, you should be able to connect any number devices.
Can you control the master to subordinate device capture offset?
Yes. This can be used to reduce interference between cameras or create effectively higher framerates.
Can the Azure Kinect DK be used outdoors?
The device should only be used in the operating environment conditions. The Azure Kinect DK is not weather proof.
What are the details of specific modes?
Details are available here https://aka.ms/kinectdocs.
When will the device be available in my area?
Watch https://azure.com/kinect for updates on this topic.
Where can I ask more questions or provide feedback?
For questions and issues pertaining to the SDK, please check our GitHub issues and create a new ones if you have more questions.
Can the directional microphone array pinpoint the spatial location of an audio source in 3 dimensions?
@joylital?

Many thanks for this.


Jannen

Checklist

[ ] documentation is added or updated
[ ] tests are added or updated

Hello @sensei777, please try your experiments in your own repository.


For fun: JetSet

SWR is awesome! In a previous chapter of my career our team undertook a similar project at one point (pre-hooks, using HOCs) -- https://github.com/DigitalGlobe/jetset -- but didn't land on nearly the level of sophistication and elegance you have achieved here. Huge props to you and the team! 💪

JetSet looks really great! Can definitely see a lot of scope overlap. I will say I'm thankful for React Hooks, I think it's made libraries like this a lot easier to use.
Thanks for sharing 😄


Timer drivers likely have off-by-one in rapidly-presented timeouts

(This one is sort of half way between a bug and an enhancement, labelling it a bug for early triage but feel free to redefine.)
Discussion in #46639 showed that the arm_arch_timer had an edge case in the rounding logic such that a system that got into a timer interrupt and back out into sys_clock_set_timeout() before the hardware counter had advanced would end up setting the resulting interrupts a cycle too early.  Even that is mostly benign (as it just produces a spurious interrupt that then reschedules the correct timeout at the next tick), but for the case of "next interrupt" (i.e. a ticks argument of 0 or 1) it would compute an expiration time of "now", which the hardware can't do.
There's nothing particularly weird about that driver, it's doing the same rounding logic almost all our other drivers are doing.  So it's likely that almost all our other drivers are subject to the same glitch, even if most of them have clock rates or interrupt latencies that prevent them from ever hitting it in practice.
In the near term, we should probably organize an audit of the existing drivers to make sure they all do the right thing (maybe a white-boxy unit test framework might help, but it would have to be able to indirect the hardware counter read, which is fiddly).
Longer term, it's clear that the bulk of our drivers are implementing the same basic architecture, with a free running up-counter and a comparator register.   We should probably look at providing a framework for them all to use so they can share the same cycle counting and tick rounding logic.

@nordic-krch FYI

This is definitely a "future" thing.  The more I think about it the more it seems like we need a single framework for a "standard up-counter with comparator" driver to cover these situations.  The hardware would provide the MIN_CYCLES parameter (how close to "now" can a timeout be set), API implementations for "current_cycles()" and "set_timeout()", and a build-time parameter for whether the counter was 64 or 32 bits wide (probably don't need to do smaller masked counters, as the only one in tree currently -- SysTick -- is non-standard anyway).  Then the framework would handle everything else in a standard way.

Un-stale.  This still needs to happen in some form.


Game engine crashes when configuring collisions on a tile map in version 4.2.1

Tested versions
4.2.1 Stable
System information
Windows 10 Pro Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz   2.20 GHz Ram 16.0 GB
Issue description
When I'm creating collisions on a tilemap the engine crashes. I making a large RPG game with lots of tilemap scenes. In the tilesmaps I create 1 physics layer for the collisions. When you fill the little squares on the map the engine randomly closes. I have my command prompt open when i code so I see that the error says fatal error.
Steps to reproduce
Configure the collisions on the tile set map after creating a physics layer.
Minimal reproduction project (MRP)
New Game Project2.zip

Is this related to this at all https://github.com/godotengine/godot/issues/86562?
Are you able to reproduce the bug consistently?

Can you try this with 4.2.2.rc1?

The bugs appears when there is a lot of tile sets scenes. Its when you configure the collisions on the tile set map. I'm going to post another zip file with more maps. Sorry for the vague information its my first time posting about a bug.

Did you try 4.2.2.rc1?

g

I just looked at the link you gave me and you are 100% correct. That is the bug that appears is when you delete a point on a layer.

Did you try 4.2.2.rc1?

Not yet.

Please do so before testing any further :) this is most likely solved already

Please do so before testing any further :) this is most likely solved already

Ok thank you.

I downloaded the 4.2.2 rc1 version.


Added Elcodi and PaymentSuite under E-commerce

ping @ziadoz

ping @ziadoz Please, can we re-open this PR? Thanks.

@mmoreram If you want it to be review again then please open a new ticket.


mmap error is not always returned in English

Fixes a build error from https://github.com/pydata/pandas/pull/12946 caused by mmap error being returned in Italian when LOCALE_OVERRIDE="it_IT.UTF-8". The test fails with:
AssertionError: "Invalid argument" does not match "[Errno 22] Argomento non valido"
        msg = "Invalid argument"
        tm.assertRaisesRegexp(mmap.error, msg, common.MMapWrapper, non_file)

i.e. message is not being matched. Change to match the errno instead as that's the same across languages.

this is fine, though equally could have just skipped this when locale is set.


citeseer dataset loss is nan

hi, thanks for your code.
There is a problem that when i use citeseer dataset , the training loss is nan.

Hi, thanks for pointing this out. I'll try to look into it as soon as possible, it's probably related to the function used to load the data.

I think after function load_data(), maybe should add:
X[np.isnan(X)] = 0.
then it works!

This is fixed now, thanks for opening the issue.


Add a first chart draft

I find Apexcharts and the corresponding vue3 wrapper very nice and technically easy to use.
So, I created a first draft to show how to work with it.
This PR will close #7

I like the way you visualized the potential bill 👍 . I merged the logic with my "savings 2023" calculation.
Things I'd like to change on the chart prior to merging it:

[ ] Reactivity (the animation might not look a bit awkward then)
[ ] Coloring / styling: Eigenanteil solid reddish, savings solid greenish, subsidization dashed, grey
[ ] Formating (€)

Moved remaining styling to #16


[Task] Change UniformNegativeSampling class name

Description
The UniformNegativeSampling class name might be misleading since it is not really doing uniform negative sampling. It'd be useful to find another name that'd be more accurate and also generic.

Rename completed in #710 to InBatchNegatives


Data Science with Python : Titanic Survival Prediction

Description
Welcome to the 'DSWP' Team, good to see you here.
With this issue, the readers will know to use machine learning to create a model that predicts which passengers survived the Titanic shipwreck
Here is the dataset to follow :  https://www.kaggle.com/c/titanic/data
To get assigned to this issue, add your serial numbers mentioned in the spreadsheet of "Data Science with Python", the approach one would follow and the choice you prefer (Documentation, Audio, Video). You can go with all three or any number of options you're interested to work on.
If you had referred any resources, add them up in "DS Resources". Similarly, if you had used datasets, include them in "DS Datasets".
Domain: Kaggle Competitions
Mentors Assigned : Dhruv Bajaj | Kareem Negm
Points to Note :
The issues will be assigned on a first come first serve basis, 1 Issue == 1 PR.
"Issue Title" and "PR Title" should be the same. Include issue number along with it.
Changes should be made inside the Datascience_With_Python/ directory & Datascience_With_Python branch.
Follow Contributing Guidelines & Code of Conduct before start Contributing.
This issue is only for 'GWOC' contributors of 'DSWP' domain.
All the best. Enjoy your journey ahead. 😎
Domain
Data Science with Python
Type of Contribution
Audio, Video, Documentation
Code of Conduct

[X] I follow Contributing Guidelines & Code of conduct of this project.

I would like to take this issue.
Name- Aryan Ahuja
Serial No. 117
Type- Documentation
Approach- creating a machine learning model that provides information on the fate of passengers on the Titanic, summarized according to economic status (class), sex, age and survival.

Issue assigned to @theshredbox for documentation

Name: saloni Thete
Sr. No: 821
Type : video
Approach : Detailed explanation of Titanic survival including jupyter notebook using a machine learning model.
@prathimacode-hub, kindly assign
/assign

I would like to work on this topic.
Pankaj Sawnani - 936
Batch - 21
Issue No - #7337
Type: Video

@prathimacode-hub 👆👆

Are you sure, you can complete it. Already issues are assigned to you? @pankaj-sawnani

Ok sure, Issue assigned to @pankaj-sawnani for video contribution

Hello, I am Deepthi M with serial number:172, Batch-5. I would like to do audio on this issue.
My approach: a detailed explanation

Issue assigned to @deepthi1107 for audio contribution

Hello, @prathimacode-hub Kindly review my pr.


need to print error when backup failed

https://github.com/vesoft-inc/nebula-br/blob/master/cmd/backup.go#L52

yes, I will add it


Move the queries script outside of the CLI

Move the queries script outside of the CLI since the server will also use them. The script should still remain in tdp-lib.

Fixed by #594, #595 and #596


Pacing fix

Another shot at improving compatibility between the Unhighlight
Positives and the Pacing feature.

Thank you!


Expand GitHub Actions

I thought it would be nice to expand the GitHub Actions to support automatic tag incrementing based on commit messages (using svu) and automatic push of some builds to the release page. I am not sure if this would be of benefit to everyone or not, so feel free to reject the PR. Hopefully it removes the need to think about any version numbers.
I also bumped up the depenencies to be the latest and set the minimum go version to be the same as the oldest version in the existing CI job.
Hopefully this helps! And thank you for an awesome library!

Awesome.

Thank you @melroy89! I made those changes, then found out some fun things about github actions. If you want to see an example of what the release page would look like take a look at this fork which will exist until this PR is merged. https://github.com/amarcum/colly/releases
This part is for future me and anyone interested in details of git/GitHub Actions.  I didn't want to clobber any parent version numbers or start back from v0.0.0, so I am currently adding the upstream of github.com/gocolly/colly in a way that won't fail when it gets merged to the main branch. This gets a better version number, at least in my opinion.

Thank you @melroy89! I made those changes, then found out some fun things about github actions. If you want to see an example of what the release page would look like take a look at this fork which will exist until this PR is merged. https://github.com/amarcum/colly/releases
This part is for future me and anyone interested in details of git/GitHub Actions.  I didn't want to clobber any parent version numbers or start back from v0.0.0, so I am currently adding the upstream of github.com/gocolly/colly in a way that won't fail when it gets merged to the main branch. This gets a better version number, at least in my opinion

Hi. I'm actually very familiar with github and github actions.
Did you also try to set fetch-tags to true in the action check out? Next to setting the depth.

I will be away from my PC for at least 12 hours, but I might be able to check my phone throughout the day. Feel free to improve the CI job and we can try out the changes on my fork if you want, or you can create your own if that makes it easier.
I am still very much a noob when it comes to GitHub actions! 😂


No my Buttons and no useable Beoremote one, Balans and Theatre entities

I have a problem with the B&O Mozart integration within Home Assistant. For quite some time, I’ve had a perfect integration with my B&O Theatre, Balance, and Beolab 8. However, in recent weeks, I’ve lost a lot of functionality, such as the absence of "My Buttons" and all Beoremote commands.
Is there antything to do?
Regards,
Martijn

Hi Martijn,
Thanks for using the custom Bang & Olufsen integration for Home Assistant. In case you don't know, this is kind of the beta-channel for the official Bang & Olufsen integration for Home Assistant.
Favourites are now implemented as an Action, also shown in the documentation:
service: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: favourite
  media_content_id: 1

Here is an example of how you can implement it to the front-end:

type: horizontal-stack
cards:
  - type: tile
    entity: media_player.beosound_theatre_11223344
    name: Fav 1
    icon: mdi:numeric-1-circle
    hide_state: true
    tap_action:
      action: perform-action
      perform_action: media_player.play_media
      target:
        entity_id: media_player.beosound_theatre_11223344
      data:
        media_content_id: "1"
        media_content_type: favourite
    icon_tap_action:
      action: none
    hold_action:
      action: none
  - type: tile
    entity: media_player.beosound_theatre_11223344
    name: Fav 2
    icon: mdi:numeric-2-circle
    hide_state: true
    tap_action:
      action: perform-action
      perform_action: media_player.play_media
      target:
        entity_id: media_player.beosound_theatre_11223344
      data:
        media_content_id: "2"
        media_content_type: favourite
    icon_tap_action:
      action: none
    hold_action:
      action: none
  - type: tile
    entity: media_player.beosound_theatre_11223344
    name: Fav 3
    icon: mdi:numeric-3-circle
    hide_state: true
    tap_action:
      action: perform-action
      perform_action: media_player.play_media
      target:
        entity_id: media_player.beosound_theatre_11223344
      data:
        media_content_id: "3"
        media_content_type: favourite
    icon_tap_action:
      action: none
    hold_action:
      action: none
  - type: tile
    entity: media_player.beosound_theatre_11223344
    name: Fav 4
    icon: mdi:numeric-4-circle
    hide_state: true
    tap_action:
      action: perform-action
      perform_action: media_player.play_media
      target:
        entity_id: media_player.beosound_theatre_11223344
      data:
        media_content_id: "4"
        media_content_type: favourite
    icon_tap_action:
      action: none
    hold_action:
      action: none

Regarding the Light and Control commands, this structure has also changed. Your speaker that has a remote control attached to it, will now have the remote as a separate device, where you can enable events for the buttons you would like to utilise.
￼
Alternatively, you can try one of the Blueprints for Mozart Platform-based products found here: cklit.dk (Light and Shade control).
We realise that these things might be inconvenient for you, but we try to follow the guidelines for integrations provided by Home Assistant for best compatibility. Hope this answers your questions :)

By the way. Just want to share my current use of the great work of you guys:
(1) Stations that, when pressed, plays music on all my B&O speakers. Calls a scripts that starts station + join all
(2) Control all speakers. Volume. skip, pause, play
(3) Mini media players where the largest cover picture is the master (beolab). Individual room control

Hi cklit
After upgrading to 3.x I also went through my automations/scripts and made edits like you described. What about bass, treble etc? Could you show how to control them via HA media player.
AND notice that after @mj23000 removed entities in 3.x, some basic newbee functionality has gone. (1) and (2) below in the integration panel has gone. I reckon that after manually deleting the obsolete entities the panel now shows a bare minimum.
Feature request: I would love if somebody with spare time would make a B&O media player that integrates perfectly with the B&O products. Image a Theatre media player that, out of the box, shows all entities/attributes, join/expand, basic localized radio stations etc. 🤗
Kind regards Frank

Hi Frank
Your setup looks awesome! Glad to see that you're getting some good use out of it.
Version 3.0.0 did remove quite a bit of easily accessible functionality.
The main goal is to get everything that is included in this HACS version of the integration into the main core integration, and the Button entities were determined to be unnecessary.
Favourites can be accessed through the play_media action, and users can create buttons to trigger these actions. Information about the favourites can now be found in media_player attributes.
The Bass, Treble and Loudness entities were removed in order to keep most of the configuration of the device inside of the app.
Unfortunately I will probably not be making a custom card, but I can only encourage people to give it a shot. I'll gladly be a tester if someone gives it a try.
Please keep on giving feedback as it is much appreciated.
Kind regards,
Markus

Hi cklit,
Thanks for the info. I will look into it.


validate whether downloaded wheel is valid or not

In _download_wheel_check we currently just check whether the wheel file is a valid zip file. Lets instead check if it is a valid wheel file by using the wheel.wheelfile.WheelFile API as mentioned in https://github.com/python-wheel-build/fromager/issues/507#issuecomment-2492133631

@tiran using wheel.wheelfile.WheelFile(wheel_filename) doesn't work. It throws an error says wheelfile is not an attribute of wheel

You have to import the submodule:
>>> import wheel
>>> wheel.wheelfile.WheelFile
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'wheel' has no attribute 'wheelfile'
>>> import wheel.wheelfile
>>> wheel.wheelfile.WheelFile
<class 'wheel.wheelfile.WheelFile'>


[CP] Fix handling of extension types in relational patterns.

Commit(s) to merge
973eca72f559493ee504bf694845d1389546ec39
Target
Beta
Prepared changelist for beta/stable
https://dart-review.googlesource.com/c/sdk/+/345826
Issue Description
The assignability rule for relational patterns using == and != was implemented incorrectly when patterns were first implemented. The rule should have been:

a compile-time error occurs if C is not assignable to A?.

(where C is the static type of the expression to the right of the relational operator, and A is the type of the formal parameter of the operator== declaration.)
What was implemented was:

a compile-time error occurs if NonNull(C) is not assignable to A.

Prior to the introduction of extension types, it was extremely unlikely for a user to notice the difference. The difference was only observable if C took the form FutureOr<T?> for some T, and A was a subtype of Object. Since it is extremely rare for constants to have a static type based on FutureOr, this basically never came up (which explains why the mistake wasn't caught in testing).
However, with the introduction of extension types, the problem is much more severe, because by default, extension types extend Object? but not Object, and by default, the formal parameter of operator== has type Object. Which means that if no changes are made, then an attempt to use an extension type as the operand of an == or != pattern will typically result in a bogus compile-time error. For example:
extension type const E(int i) {}

f(E e) {
  switch (e) {
    case == const E(0): // Error: The argument type 'E' can't be assigned to the parameter type 'Object'.
      print('E(0)');
    default:
      print('some other value');
  }
}

What is the fix
The fix is to use the specified assignability rule for relational patterns, namely:

a compile-time error occurs if C is not assignable to A?.

Why cherry-pick
If we cherry-pick the fix, that will ensure that in every stable release of Dart that supports extension types, they can be used as the operand of relational patterns that use == or !=.  The fix is fairly targeted, since the affected code in the compiler is only executed when a relational pattern is encountered.
If we don't cherry-pick the fix, then either (a) users of Dart 3.4 and later will be able to use extension types as the operand of relational patterns that use == or !=, but if they publish a package containing such a usage, their package will fail to work on Dart 3.3. Or (b) we will have to update the bug fix to be language-versioned, so that language versions prior to Dart 3.4 preserve the buggy behavior.
IMHO, cherry-picking the fix is the best option.
Risk
low
Issue link(s)
https://github.com/dart-lang/sdk/issues/54594
Extra Info
FYI, this problem was caught by a co19 test, and an incorrect fix was submitted in https://dart-review.googlesource.com/c/sdk/+/345082. The incorrect fix did not make it into the main branch before the beta cutoff.

@leafpetersen could you take a look at this cherry-pick?

Cherry-pick approved, you are good to submit the CL @stereotype441 🙂.


Fixed baselines due to the renamed option

exec.return_result_set_for_ddl -> exec.query.return_result_set_for_ddl

@Agirish please review. It's safe to rename option since it was introduced in 1.15 which it's not released yet.


New to Svelte: How would you setup this situation?

Hey, found your router solution as I'm messing around with Svelte 3.
Let's say we need this.
Route "/" to load Main
Route "/foo" to load Foo.svelte which imports Baz.svelte
Route "/bar" to load Bar which also imports the same Baz.svelte
Now my naive approach just did it as is but this is the issue.
Baz.svelte has onMount that does a thing.
Because the router remounts the whole component, it remounts the children too.
If I take the Baz.svelte outside of the Foo and Bar and into the App.svelte outside of router, I avoid the rerenders but now it also shows on "/" which is not what I wanted.
Can you point me in the right direction?

Svero has no view caching nor "subrouting" as of today. In this case, you have basically three options:

Implement a "caching" mechanism in your component, perhaps using stores, so it knows that if mounted recently, it should not be doing heavy work again, but simply load cached data.
Put your component (Baz.svelte) in App.svelte and decide when to show/hide it based on onpopstate event, so it gets independent from the views being mounted.
(Not wise, beware) Simply put Baz.svelte in both views and load it remorseless because Svelte is fast, and client-side view mounting is fast too.

Option 2 example:
<!-- ./App.svelte -->
<script>
  import { Router, Route } from 'svero';

  import Main from './pages/Main.svelte';
  import Foo from './pages/Foo.svelte';
  import Bar from './pages/Bar.svelte';
  import Baz from './components/Baz.svelte';

  let currentPath = window.location.pathname;

 $: showBaz = currentPath.includes('/foo') || currentPath.includes('/bar');
</script>

<svelte:window on:popstate={() => currentPath = window.location.pathname} />

{#if showBaz}
  <Baz />
{/if}

<Router>
  <Route path="*" component={Main} />
  <Route path="/foo" component={Foo} />
  <Route path="/bar" component={Bar} />
</Router>

Not sure if this is related with #19 but I suspect that moving from new route.component to <svelte:component /> did help to cache up things.
I wonder if we can reproduce the original issue against the changes from the PR in order to see if rerenders are still happening.
It could be? @kazzkiq


fix(python): Fixed bindings - missing classes for ModelMeshesInspecto…

…rs after last major.

:tada: This PR is included in version 5.1.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Update request: satty 0.10.0 → 0.11.2

Package name: satty
Latest released version: 0.11.2

Current version on the unstable channel: 0.10.0
Current version on the stable/release channel: no

[x] Checked the nixpkgs pull requests

Notify maintainers
@pinpox
@donovanglover

Note for maintainers: Please tag this issue in your PR.

Add a :+1: reaction to issues you find important.

next version is out: https://github.com/NixOS/nixpkgs/pull/297408


assembled spec should not be dereferenced

dereferenced documents should only really live in memory since they can get quite large in json and have circular references. The tools that use openrpc are required to dereference documents before operating on them.
this is also making it harder to compose the output in other projects like https://github.com/MetaMask/api-specs/
https://github.com/ethereum/execution-apis/blob/6b09d9fa9349e6158645dabba41ee74c8ad9b1ed/scripts/build.js#L33

@shanejonas how should we handle situations where we want to merge several allOf combinations?


@conda-forge-admin please rerender

Additional comment:
No response

Hi! This is the friendly automated conda-forge-webservice.
I just wanted to let you know that I rerendered the recipe in conda-forge/supabase-feedstock#2.


Add function to validate address ownership

To confirm the user requesting write access to their backup is who they say they are, they have to prove they are holding the private key matching the public key registered to their address. We do this with signature validation. The user submits the address, dummy data, and a corresponding signature to the service. The service looks up their public key and checks if the signature is valid.
Acceptance Criteria:

pass if valid signature


Migrate to use fabric-entity-events-v1 for Elytra flight

This mod should migrate to use FabricMC/fabric#1815 to implement its elytra flight. This should help with potential incompatibilities with mods like Origins and Elytra Trinkets

hope this gets added. The origins mod toggle flight is causing the elytra to not function at all


Ogre crashes on malformed mesh assets that refer to out-of-range indices.

If a mesh file stores index buffers, crafting index buffers which access vertices outside the vertex range will cause Ogre to crash when generating tangent data to the mesh.

Crash site looks like this http://dl.dropbox.com/u/40949268/Ogre/cycling_rope_mesh.png . A test case file cycling_rope.mesh has been archived.

Fixed in https://bitbucket.org/clb/ogre-safe-nocrashes/changeset/4ff48a2e1adf.

Another case for a file fog_plane.mesh avoided the above check, fixed in https://bitbucket.org/clb/ogre-safe-nocrashes/changeset/bbe1abe0743f .


Add -addNewFile method to PBXGroup to support adding file reference duplicates

Short description 📝
We had an issue using -addFile(at:sourceTree:sourceRoot:) resulting in a broken file reference inside the pbx file because the old path is overridden inside, which is not the expected behaviour for out problem. For more detailed informations about the issue see here.
Solution 📦
Added a new method to PBXGroup which is not performing a lookup for an already existing file reference.

Thanks for the review @pepibumur
I have added an override flag to the existing addFile method now which is by default true to support backward compatibility.

Would you mind updating the CHANGELOG? After that, we can merge the PR.


Adding config options

Closes #124
Adding options (when the integration added, there is the 'Options' button right next to 'Remove):

Update interval
Allowing to collect diagnostics data

I still don't think that we should make update interval configurable. It's an implementation detail which shouldn't be exposed to users. You may see that most components in HA Core don't allow to do that. At least we need some clear demand for this.

Haven't we spoken about it? 🤔
I believe @DurgNomis-drol wanted some better tuning of update interval. In my setup, i ll defs set the update interval to something of like 30secounds, maybe even a minute. There is no need to do as frequent updates as 10sec for my ~7 home devices that i use. All i do is "Set timer for 30 mins for laundry", so there is no fine resolution needed.
I don't really see how it can hurt having it configurable. Most other integrations i have used (when they had yaml configurations) usually had interval configurable

Do you have any real issues with low update interval? These local queries should be super fast and we can actually query local devices even every second.

I use timers with short durations sometimes, and i am very happy with 10 secs update interval. @KapJI  is right about that we should not expose low-level things like this to the user but then again, as @leikoilja mentions, it is an option many things have in yaml.

And I was under impression that we agreed to not add this in #58.

So I think unless there're no issues with current update interval, we should keep as is. If there will be any issues we should first try to solve them and then tune update interval or make it configurable.

The same idea applies to using master_token for login. We should fix gpsoauth to be more robust rather than doing this.

yeh, i guess it's just me who really wants the update interval to be configurable with not that much of objective reasoning 😅 apparently as much that i have even forgotten you've already convinced me to drop that idea 😄  will revert back :)


"hGetContents: invalid argument (invalid byte sequence)"

We are seeing this error in CI on Linux:
... hGetContents: invalid argument (invalid byte sequence)

I think it is for source files that contain unicode characters.
There's only one hGetContents in the Acton code base (https://github.com/actonlang/acton/blob/main/compiler/InterfaceFiles.hs#L31) and I tried to enforce the encoding on that file handle (https://github.com/actonlang/acton/pull/677/commits/6de2b92bb4bfd4c24042ad68948ba4df974a9c66) but that didn't help.
I've now been able to reproduce the issue locally using a container and I've now even removed the hGetContents from my version (clearly breaking actonc...) but I still get the same error, so there must be some other hGetContent... in a library we use?

Not sure if it's the right fix, but I have fixed it in #677 by implementing my own readFile & writeFile...


added isInBoundingBox function

Hey,
I really like your module and use it alot, but often times i have to do this stuff in my code, i think it could be a part of the module. Please kindly review and merge this. Once you're done please release a new version so i can officially use this function. I also added some tests to make sure everything is working.
Thanks!

@davidwood any chance to accept this PR?

Iwould hope so


please enable /issues on this repository, and make a new release on PyPI.

please enable /issues on this repository, and make a new release on PyPI.

0.3.1 is latest on GitHub and issues have been enabled.


posty beholds the painting and decides to take it since no one's around to block it.

assigned to mattArtz


warning about development build

Issue
#186

:trophy: Feature
Yes

:warning: Break Change
No

Description
We have a new warning for every time you run kool in a development build. This should help prevent inadvertent usage of edge builds for Kool development team on other projects.

Notes

The warning is only issued when output is a TTY (so we don't create hard to debug situations).
The output is issues only once (even for recursive calls)

Closes v


Druid Image Loading Example does not work.

I'm getting this error on this lines of code in Image.rs example:
fn build_widget(state: &AppState) -> Box<dyn Widget<AppState>> {
    let png_data = ImageBuf::from_data(include_bytes!("./assets/PicWithAlpha.png")).unwrap(); // <- error here

It seems Piet no longer supports creating images in this manner? I'm using the latest Github version.

Hi, You have to import image, png features. in cargo.toml:
druid = { version = "0.7.0", features = ["image", "png"] }


razor views

just tried this on a project and its AWESOME! Thanks! Is there a way to use this with razor files?

For reference, here's MonoDevelop's implementation


Refactor MapRenderer.cs

MapRenderer is gradually getting fatter.
It's about time I refactor this!

Muccha sou omi masu


how to set ValueCasting?

The document on ValueCasting still has ToDo so I guess I need to ask here... Using Marten 5.11, I am trying to set ValueCasting and leave everything as it is. How does one do that?
To give some background information, we're saving dates as UTC ISO8601 strings everywhere, but when Marten reads a document and has to save it again after something changes, the date values are set at server timezone and in an unpredictable format. We really need those strings to remain strings. (If ValueCasting is not the way to do it, please let me know! :) )
In a project's Startup.cs we do this for injecting the DocumentStore wherever it is needed:
services.AddSingleton<IDocumentStore, DocumentStore>();
// ...
services.AddMarten(options =>
{
  options.Connection(BuildPostgresConnectionString());
}

(Again, if this is not the right way, please let me know!)
Any feedback is much appreciated!

@jerry-sileon, could you expand on what do you mean by ValueCasting?

Well, I found this page:
https://martendb.io/configuration/json.html
It sounds like it is what we need, but I am not sure. The problem is this. We have documents with dates in UTC in ISO formatted strings (we are using strings to prevent conversion, it is a different discussion on why we want this but it's become a requirement now). When Marten reads a document, it converts those ISO strings to a date and when Marten writes the document again, the date is NOT in UTC and NOT in ISO string.
So we are looking for a way to either prevent Marten from converting the ISO strings to date objects. (As far as I can tell, ValueCasting was the way to do this but there could be a different way.)
Or, if it is easier, we would like to tell Marten to write ISO strings AND in UTC.
Does this make sense?

@oskardudycz , any help in this is much appreciated. I am trying to avoid a solution like adding a prefix to the date string to prevent Marten to try and interpret the string as a date.
It's either telling Marten not to convert stuff or to tell Marten, when it writes a date/time back to the document, to always use UTC timezone and ISO8601.
Thanks!

@jeremydmiller @oskardudycz
Digging and debugging some more, I am starting to see that it is happening in this part of the process:

marten reads DB document
marten converts JSON to object: here the ISO8601 string is converted to a DateTIme object
object is converted to Customer object: here the DateTIme object is converted to a string

Where in the code is the conversion from plain object (deserialised from the JSON) into our own class?
I could try and make .net use a proper serialisation for the DateTime value into an ISO8601 string using the UTC date (step 3). But I would really like to stop converting DateTime values completely (step 2). So I think the ValueCasting option is the one I would like to use. Back to the original question: how do I set the ValueCasting? The documentation says there is an example under the JIL header but it is not clear enough (for me).

It sounds a bit overkill to implement a whole new ISerializer just to set ValueCasting.

@jerry-sileon AFAIK, we're not doing any casting of the date. We're following the Npgsql behaviour, and the suggested is to, in general, use DateTimeOffset, Npgsql will do the automatic conventions in some cases on the DateTime object depending on the kind. See more at https://www.npgsql.org/doc/types/datetime.html.

@oskardudycz , the documentation on ValueCasting with Strict as the default says it is converting the strings in the JSON to types it recognises.
I got some good results using a custom ISerializer with ValueCasting.Relaxed and it works as expected: date strings in ISO format stay as such.
One problem I am having with that is that I needed to implement everything from ISerializer just to override the ValueCasting setting, which was a bit much. Especially since it appeared that the method public T FromJson<T>(Stream stream) gave an error. I debugged and the stream appeared to have an SOH character (\u0001) at the beginning. I was not able to find whether that one was added by PG or Marten but when I removed it everything went as expected.
    public T FromJson<T>(Stream stream)
    {
        var reader = new StreamReader(stream);
        var s = reader.ReadToEnd();
        s = s.Replace("\u0001", string.Empty);
        return JsonConvert.DeserializeObject<T>(s);
    }

I could not find the default serializer to override or even include, that would make things a bit easier.

@jerry-sileon, could you provide us with a failing test scenario? It'd be easier to evaluate if that's something we'll support out of the box or not. We'd need your configuration and sample documents.
Regarding SoH, check the System Text Json implementation:

https://github.com/JasperFx/marten/blob/master/src/Marten/Services/SystemTextJsonSerializer.cs#L65
https://github.com/JasperFx/marten/blob/9a1a67f8c5a7c7697f3697f37a14fff465a9c35c/src/Marten/Util/StreamExtensions.cs#L15

StreamExtensions are internal, but if that helps, we may consider making them public. Still, before that, I'd need to understand your use case better.

@jerry-sileon I'm closing this issue because of the inactivity, please ping us with reproduce steps and we'll reopen the issue.


Text Language

Looking at the text the gem uses for training, it seems to me it supports several languages but I would like to have official confirmation from you and the list of supported languages. Thank you for this awesome gem by the way.

I wish I could say that. The main principle(bayesian classifier) should work for all languages, but to make this gem work correctly for any other language there are few things that you might need to change

stop words for the specific language https://github.com/malavbhavsar/sentimentalizer/blob/master/lib/engine/classifier.rb#L10
language specific cleaner training data here https://github.com/malavbhavsar/sentimentalizer/tree/master/lib/data

Hi may I know what is the challenges does this project consist of?
I would like to participate along with u


CleaveJS inputComponent broken by migration to v5

Duplicates

[X] I have searched the existing issues

Latest version

[X] I have tested the latest version

Current behavior 😯

Functionally the TextField works, but the label animation is broken when the data is initialized at the inputComponent. Here is the code that was stable in v4:
const CleaveField:FC<FormFieldProps> = (props) => {
  const {onBlur = null, display, inputProps, InputProps, control, name, register, initialValue, errors, info} = props
  return (
    <Box errors={errors} info={info}>
      <Controller
        name={name}
        control={control}
        defaultValue={initialValue ? initialValue : ""}
				onBlur={onBlur}
        render={({ field }) => {
					if (onBlur) {
						field = {...field, onBlur}
					}
					return (
						<TextField
							{...field}
							{...FORM_DEFAULTS}
							error={errors && errors.length > 0}
							label={display}
							inputProps={inputProps}
							InputProps={{
								inputComponent: CleaveTextField
							}}
						/>
					)
				}}
      />
    </Box>
  )
}
export const CleaveTextField:FC = ({ inputRef, ...otherProps }) => (
  <Cleave {...otherProps} inputRef={(ref) => inputRef(ref)} />
)

Here is my best try in referencing the migration docs and just a pure heuristic approach:
const CleaveField:FC<FormFieldProps> = (props) => {
  const {onBlur = null, setValue: setValueForm, display, inputProps, InputProps, control, name, register, initialValue = "", errors, info} = props
  const {
    field: { onChange, onBlur:onBlurField, name:formName, value, ref },
    fieldState: { invalid, isTouched, isDirty },
    formState: { touchedFields, dirtyFields }
  } = useController({
    name,
    control,
    defaultValue: initialValue,
  });
  return (
    <Box errors={errors} info={info}>
      <TextField
        value={value}
        name={formName}
        error={errors && errors.length > 0}
        label={display}
        onChange={onChange}
        onBlur={onBlur || onBlurField}
        inputProps={{...inputProps}}
        InputProps={{
          inputComponent: CleaveTextField,
        }}
      />
    </Box>
  );
}
export const CleaveTextField = React.forwardRef(function CleaveTextField(
  props,
  ref,
) {
  return <Cleave {...props} ref={ref}/>
})

Both are broken and manifest the issue with the label rendering.
NOTE: the "Controller" component is via react-hook-form, and Cleave via https://github.com/nosir/cleave.js
Expected behavior 🤔
The expected behavior is that the TextField recognizes an initial value in a controlled component setting.
Steps to reproduce 🕹
https://codesandbox.io/s/priceless-bohr-x04cjf?file=/src/App.js
Context 🔦
Writing a form with TextField
Your environment 🌎
System:
OS: Linux 5.15 Manjaro Linux
CPU: (4) x64 Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
Memory: 3.32 GB / 15.63 GB
Container: Yes
Shell: 5.1.16 - /bin/bash
Binaries:
Node: 17.7.1 - /usr/bin/node
Yarn: 1.22.17 - /usr/bin/yarn
npm: 8.5.4 - /usr/bin/npm
Managers:
pip3: 22.0.3 - ~/.local/bin/pip3
Utilities:
CMake: 3.22.3 - /usr/bin/cmake
Make: 4.3 - /usr/bin/make
GCC: 11.2.0 - /usr/bin/gcc
Git: 2.35.1 - /usr/bin/git
Clang: 13.0.1 - /usr/bin/clang
Subversion: 1.14.1 - /usr/bin/svn
FFmpeg: 5.0 - /usr/bin/ffmpeg
Virtualization:
Docker: 20.10.12 - /usr/bin/docker
VirtualBox: 5.15.25 - /usr/bin/vboxmanage
IDEs:
Nano: 6.2 - /usr/bin/nano
Vim: 8.2 - /usr/bin/vim
Languages:
Bash: 5.1.16 - /usr/bin/bash
Go: 1.18 - /home/ddemoss/go/bin/go
Java: 1.8.0_332 - /usr/bin/javac
Perl: 5.34.0 - /usr/bin/perl
Protoc: 3.19.4 - /usr/bin/protoc
Python: 3.10.2 - /usr/bin/python
Python3: 3.10.2 - /usr/bin/python3
Databases:
SQLite: 3.38.0 - /usr/bin/sqlite3
Browsers:
Chromium: 99.0.4844.51
Firefox: 98.0

Can you please link a codesandbox with v4 too where it worked?

Thanks for the reply. Looks like this was a prop name issue. Cleave was looking for "htmlRef". Marking this as solved and closing

Thanks for the reply. Looks like this was a prop name issue. Cleave was looking for "htmlRef". Marking this as solved and closing

making "this" what? how to solve?