Visage - The improved, open source, avatar service

I recently created Visage, a rewrite of Lapitar. It’s an open source (MIT) avatar service, backed by GPUs and designed for speed.

Here’s some example renders:

There’s also bust (torso, arms, head), head, and face renders:

For API documentation, you can go to the official site.


  • Antialiasing
  • Perspective 3D renders (not isometric)
  • Support for skins with indexed color
  • Support for skins with opaque helmets (like Notch’s)
  • Lighting
  • Psuedo ambient occlusion
  • Fast
  • Full UUID support
  • Full support for 1.8-style skins with two layers

You can blame Minecrell for this topic’s existence.


Looks very nice, good work. Should be a huge help to a good amount of people.

How many avatar services do we need? It’s really getting annoying now.

1 Like

@WetSponge I don’t see what’s annoying about people making something cool that they are proud of.

This is neat, @Aesen!


Bug: Dinnerbone is not up-side down :open_mouth:


I was hoping nobody would notice that… :confused:

I was halfway through writing a commit to do that when I realized I was about to rewrite half of the render code to allow a conditional render… for one player.

It may still become a feature eventually =P


Just turn the picture 180 degrees :stuck_out_tongue:

But then the shadow is on the ceiling!

Oh forgot about shadows…


Nice work on this, I wonder how this one will hold up against the other services though.

Excellent job none the less however!

It doesn’t really work for me. I only get “500 - Could not render your request”

It’s working fine for me. if you give me your UUID or username, I could try to find where your request failed in the log and see why it did.

why do you need his uuid/username? Do you get a lot of failed requests?

This way it’s much easier to debug…

My username works flawlessly btw.

I’m getting the same. Username: OscarOrSomething

Just tried again. My UUID works but my Username is broken. Username: Tzky

Usernames aren’t recommended, you should use UUID’s all the time.


Not really, but the logging is rather intense, and I get ~10,000 requests a day. It’s kind of hard to sift through manually.

Usernames aren’t guaranteed to work, ever. They lean on Mojang’s servers, and are very very slow. There’s a gigantic yellow banner on the site begging you not to use them.
I will look into it, though. Please post some links to broken requests; some cursory checks show that Tzky and OscarOrSomething are rendering fine in Full, Bust, and Head view.

Permanent, and highly recommended workaround: Use UUIDs.

I have tried every username listed in the screenshot:

Script source:

while read name; do
        response=`curl -Ls -D -$name -o /dev/null |grep 'HTTP/1.1' |tail -1`
        response_code=`echo $response | cut -d ' ' -f 2`
        response_msg=`echo $response | cut -d ' ' -f 3-1000`
        if [[ $response_code == 200 ]]; then
                tput setaf 2
        elif [[ $response_code == 500 ]]; then
                tput setaf 1
                tput setaf 3
        echo "$name:$response_msg"
done | column -t -s ':'
tput sgr0

It seems a lot of people have changed their names since you posted the screenshot; or, maybe before you did. That may have caused your issue; it’s strange for a wrong username to return a 500, though…