annotate getskin.py @ 133:0d8eabdd12ab default tip

create: write H:MM:SS timestamps, add option to fill with gaussian-blur instead of black many albums are longer than one hour so writing H:MM:SS is a necessity. if anything there will just be verbose info that isn't important for my use-case. however the gaussian-blur is simply broken. It works, and it plays locally just fine, but YouTube in particular elongates the video to fit the full width. I'm not entirely sure why it does this, but it makes it useless and ugly.
author Paper <paper@tflc.us>
date Sat, 03 Jan 2026 20:25:38 -0500
parents eac6dae753ca
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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)