From the ice-adapter log of a remote peer:
With Downlord's client:
{"foundation":"1","protocol":"udp","priority":2130706431,"ip":"192.168.XXX.XXX","port":6911,"type":"HOST_CANDIDATE","generation":0,"id":"1","relPort":0},
{"foundation":"2","protocol":"udp","priority":2130706431,"ip":"2001:0:14be:4c8:XXXX:XXXX:XXXX:XXXX","port":6911,"type":"HOST_CANDIDATE","generation":0,"id":"3","relPort":0},
{"foundation":"3","protocol":"udp","priority":2113937151,"ip":"fe80:0:0:0:XXXX:XXXX:XXXX:XXXX","port":6911,"type":"HOST_CANDIDATE","generation":0,"id":"4","relPort":0}
With Python client:
{"foundation":"1","protocol":"udp","priority":2130706431,"ip":"192.168.XXX.XXX","port":6466,"type":"HOST_CANDIDATE","generation":0,"id":"25","relPort":0},
{"foundation":"2","protocol":"udp","priority":2130706431,"ip":"fe80:0:0:0:XXXX:XXXX:XXXX:XXXX","port":6466,"type":"HOST_CANDIDATE","generation":0,"id":"26","relPort":0},
{"foundation":"3","protocol":"udp","priority":2113932031,"ip":"10.XXX.XXX.XXX","port":6466,"type":"HOST_CANDIDATE","generation":0,"id":"27","relPort":0},
{"foundation":"4","protocol":"udp","priority":1677724415,"ip":"149.XXX.XXX.XXX","port":27628,"type":"SERVER_REFLEXIVE_CANDIDATE","generation":0,"id":"28","relAddr":"10.XXX.XXX.XXX","relPort":6466},
{"foundation":"5","protocol":"udp","priority":2815,"ip":"116.XXX.XXX.XXX","port":12105,"type":"RELAYED_CANDIDATE","generation":0,"id":"29","relAddr":"149.XXX.XXX.XXX","relPort":27628}
It seems that the missing "SERVER_REFLEXIVE_CANDIDATE" is the issue. Since that's a server-side addition, I wonder how this can differ between clients.