Mercurial > codedump
annotate getskin.py @ 119:196cf2e3d96e
channeldownloader: insane memory optimizations
it should now use at maximum 300mb if you're using the split json files
committer: GitHub <noreply@github.com>
author | Paper <37962225+mrpapersonic@users.noreply.github.com> |
---|---|
date | Sat, 25 Mar 2023 17:02:23 -0400 |
parents | eac6dae753ca |
children |
rev | line source |
---|---|
44
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
1 # minecraft skin fetcher |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
2 # by Paper, 2021-07-13 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
3 # this only really exists as reference to a possible java implementation |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
4 # (for those beta versions of minecraft that don't support UUIDs) |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
5 # however, i do not have any java experience, like, at all |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
6 # so that'll be fun! |
118
eac6dae753ca
*: major cleanup
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
44
diff
changeset
|
7 # |
eac6dae753ca
*: major cleanup
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
44
diff
changeset
|
8 # update 2023-03-03: it was never written LOL |
44
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
9 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
10 import argparse |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
11 import base64 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
12 import cv2 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
13 import json |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
14 import numpy |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
15 import urllib.request |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
16 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
17 def get_status_code(mcign): |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
18 return urllib.request.urlopen(f"https://api.mojang.com/users/profiles/minecraft/{mcign}").getcode() |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
19 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
20 # parse arguments |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
21 parser = argparse.ArgumentParser() |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
22 parser.add_argument('-c', '--crop', help='crops your skin to 64x32, for beta versions', action="store_true") |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
23 parser.add_argument('-u', '--username', help='minecraft in-game name') |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
24 args = parser.parse_args() |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
25 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
26 # parse username, probably unnecessarily long but idc |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
27 if args.username: |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
28 myname = args.username |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
29 try: |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
30 statuscode = get_status_code(myname) |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
31 except: |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
32 myname = input("What is your Minecraft username?: ") |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
33 statuscode = get_status_code(myname) |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
34 finally: |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
35 while statuscode == 204: |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
36 myname = input("What is your Minecraft username?: ") |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
37 statuscode = get_status_code(myname) |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
38 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
39 skinlink = json.loads(base64.b64decode(json.loads(urllib.request.urlopen(f'https://sessionserver.mojang.com/session/minecraft/profile/{json.loads(urllib.request.urlopen("https://api.mojang.com/users/profiles/minecraft/{0}".format(myname)).read().decode("utf-8"))["id"]}').read().decode("utf-8"))["properties"][0]["value"]).decode("utf-8"))["textures"]["SKIN"]["url"] # get your free long lines here! |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
40 skin = numpy.asarray(bytearray(urllib.request.urlopen(skinlink).read()), dtype="uint8") |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
41 skin = cv2.imdecode(skin, cv2.IMREAD_UNCHANGED) |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
42 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
43 # this is worthless if your skin is already 64x32 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
44 if args.crop: |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
45 skin = skin[0:32, 0:64] |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
46 |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
47 # write the final skin |
190ac0f669c6
Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
48 cv2.imwrite("skin.png", skin) |