Skip to content

Globally recognized avatars

Set your avatar once. See it everywhere.

Visage ties a picture to your email address. Blogs, forums, code hosts and chat apps that support Visage show it next to your name automatically, so you never upload the same photo to a new account again.

  • Verified by email
  • Your address stays hashed
  • Change it any time

How it works

Three steps, then you never think about it again

  1. 01

    Sign up with your email

    Use the address you already comment, commit and chat with. We send a 6-digit code to prove it is yours.

  2. 02

    Upload and crop a picture

    Pick a photo, frame your face in the circle and give it a rating so every site knows where it fits.

  3. 03

    It shows up everywhere

    Sites that support Visage turn your email into your picture on their own. Change it once and they all follow.

Under the hood, every site asks for the same thing:

Email

maya@example.com

SHA-256 hash, safe to share

hashing

Avatar

/avatar/hash

Try it

See what any email shows

Type an address to preview the picture sites display for it. If nobody has claimed it yet, you will see the fallback style the site asks for.

The address is hashed in your browser. Only the hash is sent.

Fallback style

someone@example.com

Hash

hashing

Default styles

No picture yet? Everyone still gets a face

When an address has no avatar, sites pick a fallback. Generated styles are drawn from the email hash, so each person keeps the same one everywhere.

  • Mystery person exampleMystery person exampleMystery person example

    Mystery person

    A calm, neutral silhouette that looks the same for everyone.

  • Identicon exampleIdenticon exampleIdenticon example

    Identicon

    A geometric quilt pattern unique to every email.

  • Monster exampleMonster exampleMonster example

    Monster

    A friendly little monster with its own colors, eyes and horns.

  • Wavatar exampleWavatar exampleWavatar example

    Wavatar

    A cartoon face with its own expression and color scheme.

  • Retro exampleRetro exampleRetro example

    Retro

    An 8-bit, arcade-style pixel pattern.

  • Robot exampleRobot exampleRobot example

    Robot

    A robot assembled from heads, eyes, antennas and grills.

  • Initials exampleInitials exampleInitials example

    Initials

    Initials from a name, set on a color picked from the hash.

  • Color exampleColor exampleColor example

    Color

    A single solid color picked from the hash.

  • Blank

    A fully transparent image.

Made for people

You stay in charge of how you show up

  • Every address, its own face

    Link your personal, work and school emails to one account and give each one the picture that fits.

  • Ratings that respect context

    Mark each picture G, PG, R or X. Sites choose what they allow, and everything else falls back politely.

  • Alt text that travels

    Describe your picture once. Apps that read your profile can pass the description to screen readers.

  • A profile people can find

    An optional public page with your name, pronouns, role and links, sitting right behind your avatar.

  • Private by design

    Links only ever carry a one-way hash of your email. Your address is never shown on your profile.

  • Change once, update everywhere

    New haircut? Upload a new picture and sites pick it up within minutes, without you logging in anywhere.

For developers

Avatars for your app in one line

No uploads, no storage, no image pipeline. Hash the email, build the URL, and every user gets a face.

  • s=160Any size from 1 to 2048 pixels
  • d=retroNine fallback styles, or your own image
  • r=pgOnly show pictures rated for your audience
  • /api/profilesPublic profiles as JSON, ready for any app
Read the developer docs
HTML
<img
  src="https://your-visage-address/avatar/HASH?s=80&d=identicon"
  width="80" height="80" alt="">
JavaScript
const data = new TextEncoder().encode(email.trim().toLowerCase())
const digest = await crypto.subtle.digest('SHA-256', data)
const hash = Array.from(new Uint8Array(digest))
  .map(byte => byte.toString(16).padStart(2, '0'))
  .join('')

avatar.src = `https://your-visage-address/avatar/${hash}?s=160&d=retro`

Questions

Good to know

Give your email a face

It takes a minute to set up, and it keeps working every time you sign up somewhere new.

Create your avatar
Made with Modulify