crafatar/lib/views/index.html.ejs
2015-10-15 00:57:48 +02:00

384 lines
23 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Crafatar</title>
<link rel="icon" sizes="16x16" type="image/png" href="/favicon.png">
<meta charset="utf-8">
<!-- FIXME: Use CDN --> <link rel="stylesheet" href="/stylesheets/bootstrap.min.css">
<link rel="stylesheet" href="/stylesheets/style.css">
<meta name="description" content="Crafatar is a blazing fast Minecraft avatar API with support for avatars, skins, and even 3D renders!">
<meta name="keywords" content="minecraft, avatar, renders, skins, uuid, username">
<meta name="viewport" content="initial-scale=1,maximum-scale=1">
<meta property="og:title" content="Crafatar">
<meta property="og:type" content="website">
<meta property="og:url" content="<%= domain %>">
<meta property="og:image" content="<%= domain %>/logo.png">
<meta property="og:description" content="A blazing fast Minecraft avatar API with support for avatars, skins, and 3D renders.">
<meta name="twitter:card" content="summary">
<meta name="twitter:creator" content="@Crafatar">
</head>
<body>
<a href="https://github.com/crafatar/crafatar" target="_blank" class="forkme">Fork me on GitHub</a>
<a href="https://akliz.net/crafatar" target="_blank" title="Crafatar is sponsored by Akliz" class="sponsor">
<img src="/images/akliz.png" alt="Akliz"></a>
<div class="jumbotron">
<div class="container">
<h1>Crafatar</h1>
<h2>A blazing fast API for Minecraft faces!</h2>
<div class="avatar-wrapper">
<div title="jomo's avatar" class="avatar jomo"></div>
<div title="jake_0's avatar" class="avatar jake_0"></div>
<div title="sk89q's avatar" class="avatar sk89q"></div>
<div title="md_5's avatar" class="avatar md_5"></div>
<div title="notch's avatar" class="avatar notch"></div>
<div title="jeb's avatar" class="avatar jeb"></div>
<div title="dinnerbone's avatar" class="avatar dinnerbone flipped"></div>
<div title="ez' avatar" class="avatar ez"></div>
<div title="grumm's avatar" class="avatar grumm flipped"></div>
<div title="themogmimer's avatar" class="avatar themogmimer"></div>
<div title="searge's avatar" class="avatar searge"></div>
<div title="xlson's avatar" class="avatar xlson"></div>
<div title="krisjelbring's avatar" class="avatar krisjelbring"></div>
<div title="minecraftchick's avatar" class="avatar minecraftchick"></div>
<div title="kappe's avatar" class="avatar kappe"></div>
<div title="marc's avatar" class="avatar marc"></div>
<div title="mollstam's avatar" class="avatar mollstam"></div>
<div title="evilseph's avatar" class="avatar evilseph"></div>
<div title="thinkofdeath's avatar" class="avatar thinkofdeath"></div>
</div>
</div>
</div>
<div class="container">
<section id="documentation">
<div class="alert alert-danger" role="alert">
<h5>Usernames are deprecated!</h5>
You should only use usernames for <i>testing</i>.<br>
Updates are slower, some features are not available, and it may <strong>break anytime</strong>!<br>
<i>We strongly advise you to use UUIDs instead of usernames.</i> <small><a href="#usernames">more info</a></small>
</div>
<h2>Documentation</h2>
<div class="row">
<section>
<a id="avatars" class="anchor"></a><a href="#avatars"><h3>Avatars</h3></a>
<div class="code"><%= domain %>/avatars/<mark class="green">uuid</mark>
</div>
<section>
<a id="avatar-parameters" class="anchor"></a><a href="#avatar-parameters"><h4>Avatar Parameters</h4></a>
<table class="table table-striped">
<thead>
<tr>
<td>parameter</td>
<td>type</td>
<td>default</td>
<td>description</td>
</tr>
</thead>
<tbody>
<tr>
<td>size</td>
<td>integer</td>
<td><%= config.avatars.default_size %></td>
<td>The size of the image in pixels, <%= config.avatars.min_size %> - <%= config.avatars.max_size%>.</td>
</tr>
<tr>
<td>default</td>
<td>string</td>
<td>The standard value is calculated based on the UUID (even = MHF_Alex, odd = MHF_Steve).<br>
Usernames always default to MHF_Steve.</td>
<td>The image to be served when the player has no skin.<br>
Valid options are any name or uuid, including<a href="/avatars/0?default=MHF_Steve"> MHF_Steve</a> and<a href="/avatars/0?default=MHF_Alex"> MHF_Alex</a>, or a custom URL.</td>
</tr>
<tr>
<td>helm</td>
<td>null</td>
<td></td>
<td>Apply the "second" layer (hat) to the avatar.</td>
</tr>
</tbody>
</table>
</section>
<section>
<a id="avatar-examples" class="anchor"></a><a href="#avatar-examples"><h4>Avatar Examples</h4></a>
<div class="code">
<div id="avatar-example-1" class="example-wrapper">
<div class="example"><%= domain %>/avatars/853c80ef3c3749fdaa49938b674adae6</div>
<p class="preview">Jeb's avatar</p>
</div>
<div id="avatar-example-2" class="example-wrapper">
<div class="example"><%= domain %>/avatars/853c80ef3c3749fdaa49938b674adae6?helm</div>
<p class="preview">Jeb's avatar with helm</p>
</div>
<div id="avatar-example-3" class="example-wrapper">
<div class="example"><%= domain %>/avatars/853c80ef3c3749fdaa49938b674adae6?size=128</div>
<p class="preview">Jeb's avatar, 128 × 128</p>
</div>
<div id="avatar-example-4" class="example-wrapper">
<div class="example"><%= domain %>/avatars/853c80ef3c3749fdaa49938b674adae6</div>
<p class="preview">Jeb's avatar by UUID</p>
</div>
<div id="avatar-example-5" class="example-wrapper">
<div class="example"><%= domain %>/avatars/853c80ef3c3749fdaa49938b674adae6?default=MHF_Alex</div>
<p class="preview">Jeb's avatar, or fall back to MHF_Alex <i>(this example assumes jeb_ does not exist)</i></p>
</div>
<div id="avatar-example-6" class="example-wrapper">
<div class="example"><%= domain %>/avatars/853c80ef3c3749fdaa49938b674adae6?default=https%3A%2F%2Fi.imgur.com%2FocJVWAc.png</div>
<p class="preview">Jeb's avatar, or fall back to a custom image <i>(this example assumes jeb_ does not exist)</i></p>
</div>
<p class="preview-placeholder">Hover over the example URLs above for a preview!</p>
</div>
<div class="preview-background"></div>
</section>
</section>
<section>
<a id="renders" class="anchor"></a><a href="#renders"><h3>3D Renders</h3></a>
<p>Crafatar also provides support for 3D renders of Minecraft skins.<br>
Please note that <b>this feature is currently beta</b>!<br>
The <b>head</b> render type returns a render of the skin's head.<span class="code"><%= domain %>/renders/head/<mark class="green">uuid</mark></span>The <b>body</b> render returns a render of the entire skin.<span class="code"><%= domain %>/renders/body/<mark class="green">uuid</mark></span></p>
<section>
<a id="render-parameters" class="anchor"></a><a href="#render-parameters"><h4>Render Parameters</h4></a>
<table class="table table-striped">
<thead>
<tr>
<td>parameter</td>
<td>type</td>
<td>default</td>
<td>description</td>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>integer</td>
<td><%= config.renders.default_scale %>. The actual size differs between the type of render.</td>
<td>The scale factor of the image <%= config.renders.min_scale %> - <%= config.renders.max_scale %>.</td>
</tr>
<tr>
<td>helm</td>
<td>null</td>
<td></td>
<td>Apply the "second" layer (hat) to the avatar.</td>
</tr>
<tr>
<td>default</td>
<td>string</td>
<td>The standard value is calculated based on the UUID (even = MHF_Alex, odd = MHF_Steve).<br>
Usernames always default to MHF_Steve.</td>
<td>The image to be served when the uuid has no skin.<br>
Valid options are any uuid, including<a href="/renders/body/0?default=MHF_Steve"> MHF_Steve</a> and<a href="/renders/body/0?default=MHF_Alex"> MHF_Alex</a>, or a custom URL.</td>
</tr>
</tbody>
</table>
</section>
<section>
<a id="render-examples" class="anchor"></a><a href="#render-examples"><h4>Render Examples</h4></a>
<div class="code">
<div id="render-example-1" class="example-wrapper">
<div class="example"><%= domain %>/renders/body/853c80ef3c3749fdaa49938b674adae6?helm&amp;scale=4</div>
<p class="preview">Jeb's body, with helmet, scale 4</p>
</div>
<div id="render-example-2" class="example-wrapper">
<div class="example"><%= domain %>/renders/head/853c80ef3c3749fdaa49938b674adae6?scale=8</div>
<p class="preview">Jeb's head, by UUID, scale 8</p>
</div>
<p class="preview-placeholder">Hover over the example URLs above for a preview!</p>
</div>
<div class="preview-background"></div>
</section>
</section>
<section>
<a id="skins" class="anchor"></a><a href="#skins"><h3>Skins</h3></a>
<p>You can also get the full skin file of a player.<br>
The user's skin is returned, or the default image is served.<br>
You can use the default parameter here as well.<span class="code"><%= domain %>/skins/<mark class="green">uuid</mark></span></p>
<section>
<a id="skin-parameters" class="anchor"></a><a href="#skin-parameters"><h4>Skin Parameters</h4></a>
<table class="table table-striped">
<thead>
<tr>
<td>parameter</td>
<td>type</td>
<td>default</td>
<td>description</td>
</tr>
</thead>
<tbody>
<tr>
<td>default</td>
<td>string</td>
<td>The standard value is calculated based on the UUID (even = MHF_Alex, odd = MHF_Steve).<br>
Usernames always default to MHF_Steve.</td>
<td>The image to be served when the uuid has no skin.<br>
Valid options are any uuid, including<a href="/skins/0?default=MHF_Steve"> MHF_Steve</a> and<a href="/skins/0?default=MHF_Alex"> MHF_Alex</a>, or a custom URL.</td>
</tr>
</tbody>
</table>
</section>
<section>
<a id="skin-examples" class="anchor"></a><a href="#skin-examples"><h4>Skin Examples</h4></a>
<div class="code">
<div id="skin-example-1" class="example-wrapper">
<div class="example"><%= domain %>/skins/853c80ef3c3749fdaa49938b674adae6</div>
<p class="preview">Jeb's skin</p>
</div>
<div id="skin-example-2" class="example-wrapper">
<div class="example"><%= domain %>/skins/853c80ef3c3749fdaa49938b674adae6?default=MHF_Alex</div>
<p class="preview">Jeb's skin, or fall back to MHF_Alex <i>(this example assumes jeb_ does not exist)</i></p>
</div>
<p class="preview-placeholder">Hover over the example URLs above for a preview!</p>
</div>
<div class="preview-background"></div>
</section>
</section>
<section>
<a id="capes" class="anchor"></a><a href="#capes"><h3>Capes</h3></a>
<p>A cape endpoint is also available to get the active cape of a user.<br>
The user's cape is returned, otherwise a 404 is returned.<br>
<div class="code"><%= domain %>/capes/<mark class="green">uuid</mark>
</div>
</p>
<section>
<a id="cape-examples" class="anchor"></a><a href="#cape-examples"><h4>Cape Examples</h4></a>
<div class="code">
<div id="cape-example-1" class="example-wrapper">
<div class="example"><%= domain %>/capes/61699b2ed3274a019f1e0ea8c3f06bc6</div>
<p class="preview">Dinnerbone's Cape <i>Mojang capes are not transparent...</i></p>
</div>
<div id="cape-example-2" class="example-wrapper">
<div class="example"><%= domain %>/capes/af74a02d19cb445bb07f6866a861f783</div>
<p class="preview">md_5's Cape</p>
</div>
<p class="preview-placeholder">Hover over the example URLs above for a preview!</p>
</div>
<div class="preview-background"></div>
</section>
</section>
<section>
<a id="meta" class="anchor"></a><a href="#meta"><h2>Meta</h2></a>
<section>
<a id="meta-cors" class="anchor"></a><a href="#meta-cors"><h3>CORS</h3></a>
<p>Crafatar supports CORS so you can make AJAX request from within the browser!</p>
</section>
<section>
<a id="meta-http-headers" class="anchor"></a><a href="#meta-http-headers"><h3>HTTP Headers</h3></a>
<p>Responses come with these HTTP headers, useful for debugging.<br>
Please note that these headers are cached by CloudFlare <small>(CF-Cache-Status: HIT)</small>.</p>
<section>
<a id="meta-response-time" class="anchor"></a><a href="#meta-response-time"><h4>Response-Time</h4></a>
<p>The time, in milliseconds, it took Crafatar to process the request.</p>
</section>
<section>
<a id="meta-x-storage-type" class="anchor"></a><a href="#meta-x-storage-type"><h4>X-Storage-Type</h4></a>
<p>Details about how the requested image was stored on the server</p>
<ul>
<li><b>none</b>: No external requests. Cached: User has no skin.</li>
<li><b>cached</b>: No external requests. Skin cached and stored locally.</li>
<li><b>checked</b>: 1 external request. Skin cached, checked for updates, no skin downloaded.<br>
This happens either when the user removed their skin or when it didn't change.</li>
<li><b>downloaded</b>: 2 external requests. First request or skin changed, skin downloaded.</li>
<li><b>server error</b>: This can happen, for example, when Mojang's servers are down.<br>
If possible, a cached image is served instead.</li>
<li><b>user error</b>: You have done something wrong, such as requesting a malformed uuid.<br>
Check the response body for details.</li>
</ul>
</section>
<section>
<a id="meta-x-request-id" class="anchor"></a><a href="#meta-x-request-id"><h4>X-Request-ID</h4></a>
<p>The internal ID assigned to this request.<br>
If you think something is wrong with your request, please <a href="#contact">contact us</a> and provide this ID.</p>
</section>
</section>
<section id="usernames">
<a href="#usernames"><h3>About Usernames</h3></a>
<p>
We <strong>strongly</strong> advise you to use UUIDs instead of usernames! UUIDs never change while usernames do.<br>
Looking up players by username has officially been deprecated by Mojang ever since UUIDs were introduced.<br>
Crafatar uses a legacy API to retrieve skins for usernames that updates very slowly.<br>
Skins come without any details, including whether a player uses the Alex or Steve skin model.<br>
Additionally, Mojang has stated that this legacy interface may be disabled anytime, causing all requests to fail.<br>
Malformed usernames are rejected.
</p>
</section>
<section>
<a id="meta-about-uuids" class="anchor"></a><a href="#meta-about-uuids"><h3>About UUIDs</h3></a>
<p>UUIDs may use the blank or dashed format.<br>
Malformed UUIDs are rejected.</p>
</section>
<section>
<a id="meta-about-caching" class="anchor"></a><a href="#meta-about-caching"><h3>About Caching</h3></a>
<p>Crafatar caches skins for <%= config.caching.local / 60 %> minutes before checking for skin changes.<br>
Images are cached in your browser for <%= config.caching.browser / 60 %> minutes until a new request to Crafatar is made.<br>
When you changed your skin you can try clearing your browser cache to see the change faster.</p>
</section>
</section>
<section>
<a id="contact" class="anchor"></a><a href="#contact"><h2>Contact</h2></a>
<ul>
<li>Follow us on twitter <a href="https://twitter.com/crafatar" target="_blank">@crafatar</a></li>
<li>Open an issue <a href="https://github.com/crafatar/crafatar/issues" target="_blank">on GitHub</a></li>
<li><a href="https://webchat.esper.net/?channels=crafatar" target="_blank">Join us</a> in #crafatar on irc.esper.net</li>
</ul>
</section>
</div>
</section>
<footer>
<hr>
<p class="pull-right">Copyright Crafatar <%= new Date().getFullYear() %></p>
</footer>
</div>
<img src="/avatars/020242a17b9441799eff511eea1221da?size=64" alt="preloaded image" class="preload">
<img src="/avatars/020242a17b9441799eff511eea1221da?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/069a79f444e94726a5befca90e38aaf5?size=64" alt="preloaded image" class="preload">
<img src="/avatars/0?default=MHF_Alex" alt="preloaded image" class="preload">
<img src="/avatars/0?default=https%3A%2F%2Fi.imgur.com%2FocJVWAc.png" alt="preloaded image" class="preload">
<img src="/avatars/0ea8eca3dbf647cc9d1ac64551ca975c?size=64" alt="preloaded image" class="preload">
<img src="/avatars/0ea8eca3dbf647cc9d1ac64551ca975c?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/1c1bd09a6a0f4928a7914102a35d2670?size=64" alt="preloaded image" class="preload">
<img src="/avatars/1c1bd09a6a0f4928a7914102a35d2670?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/2d5aa9cdaeb049189930461fc9b91cc5?size=64" alt="preloaded image" class="preload">
<img src="/avatars/2d5aa9cdaeb049189930461fc9b91cc5?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/4566e69fc90748ee8d71d7ba5aa00d20?size=64" alt="preloaded image" class="preload">
<img src="/avatars/4566e69fc90748ee8d71d7ba5aa00d20?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/61699b2ed3274a019f1e0ea8c3f06bc6?size=64" alt="preloaded image" class="preload">
<img src="/avatars/61699b2ed3274a019f1e0ea8c3f06bc6?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/696a82ce41f44b51aa31b8709b8686f0?size=64" alt="preloaded image" class="preload">
<img src="/avatars/696a82ce41f44b51aa31b8709b8686f0?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/7125ba8b1c864508b92bb5c042ccfe2b?size=64" alt="preloaded image" class="preload">
<img src="/avatars/7125ba8b1c864508b92bb5c042ccfe2b?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/7d043c7389524696bfba571c05b6aec0?size=64" alt="preloaded image" class="preload">
<img src="/avatars/7d043c7389524696bfba571c05b6aec0?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/853c80ef3c3749fdaa49938b674adae6" alt="preloaded image" class="preload">
<img src="/avatars/853c80ef3c3749fdaa49938b674adae6?size=64" alt="preloaded image" class="preload">
<img src="/avatars/853c80ef3c3749fdaa49938b674adae6?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/9769ecf6331448f3ace67ae06cec64a3?size=64" alt="preloaded image" class="preload">
<img src="/avatars/9769ecf6331448f3ace67ae06cec64a3?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/ae795aa86327408e92ab25c8a59f3ba1?size=64" alt="preloaded image" class="preload">
<img src="/avatars/ae795aa86327408e92ab25c8a59f3ba1?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/af74a02d19cb445bb07f6866a861f783?size=64" alt="preloaded image" class="preload">
<img src="/avatars/af74a02d19cb445bb07f6866a861f783?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/b05881186e75410db2db4d3066b223f7?size=64" alt="preloaded image" class="preload">
<img src="/avatars/b05881186e75410db2db4d3066b223f7?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/b9583ca43e64488a9c8c4ab27e482255?size=64" alt="preloaded image" class="preload">
<img src="/avatars/b9583ca43e64488a9c8c4ab27e482255?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/c9b54008fd8047428b238787b5f2401c?size=64" alt="preloaded image" class="preload">
<img src="/avatars/c9b54008fd8047428b238787b5f2401c?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/d8f9a4340f2d415f9acfcd70341c75ec?size=64" alt="preloaded image" class="preload">
<img src="/avatars/d8f9a4340f2d415f9acfcd70341c75ec?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/e6b5c088068044df9e1b9bf11792291b?size=64" alt="preloaded image" class="preload">
<img src="/avatars/e6b5c088068044df9e1b9bf11792291b?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/f8cdb6839e9043eea81939f85d9c5d69?size=64" alt="preloaded image" class="preload">
<img src="/avatars/f8cdb6839e9043eea81939f85d9c5d69?size=64&amp;helm" alt="preloaded image" class="preload">
<img src="/avatars/853c80ef3c3749fdaa49938b674adae6" alt="preloaded image" class="preload">
<img src="/avatars/853c80ef3c3749fdaa49938b674adae6?helm" alt="preloaded image" class="preload">
<img src="/avatars/853c80ef3c3749fdaa49938b674adae6?size=128" alt="preloaded image" class="preload">
<img src="/capes/61699b2ed3274a019f1e0ea8c3f06bc6" alt="preloaded image" class="preload">
<img src="/capes/af74a02d19cb445bb07f6866a861f783" alt="preloaded image" class="preload">
<img src="/renders/body/853c80ef3c3749fdaa49938b674adae6?helm&amp;scale=4" alt="preloaded image" class="preload">
<img src="/renders/head/853c80ef3c3749fdaa49938b674adae6?scale=8" alt="preloaded image" class="preload">
<img src="/skins/0?default=MHF_Alex" alt="preloaded image" class="preload">
<img src="/skins/853c80ef3c3749fdaa49938b674adae6" alt="preloaded image" class="preload">
</body>
</html>