DEV Community

Arth
Arth

Posted on

User avatars for your next project in 1 API call

Serverless Userpics

Open-source code: Github
Try live: userpics.devclad.com

Background?

I had been using Dicebear avatars locally for my app (DevClad) but then I came across a better set of avatars by Craftworks.design (a free set) and thought I should use them for all my projects.

Gist of it

So, long story short, I created a Cloudflare R2 bucket, uploaded 100 avatars, created a serverless Go function using Vercel serverless functions and voila!

Run curl -XGET 'https://userpics.devclad.com/api/getpic' and instantly get a random user avatar URL.

Why a URL?

So- why a URL? Why not streamed bytes directly in response?

It works for everyone this way.

Case 1: Someone might be simply embedding the image. A permlink of the image is objectively better.
Case 2: Save it to your own S3 bucket.

How does it work

Case 1: curl -XGET 'https://userpics.devclad.com/api/getpic'
Case 2: An example in Python (specifically tailored for Django) that works with userpics.devclad.com

def random_avatar():
    name = str(uuid.uuid4())[:8]
    with open(f"media/avatars/{name}.png", "wb+") as f:
        url = requests.get("https://userpics.devclad.com/api/getpic")
        response = requests.get(url.text, stream=True)
        if not response.ok:
            raise Exception("Could not get avatar")
        for block in response.iter_content(1024):
            if not block:
                break
            f.write(block)
    return f"avatars/{name}.png"
Enter fullscreen mode Exit fullscreen mode

That's it. Feel free to open feature requests or whatever.
The repo is here - github.com/arthtyagi/serverless-userpics

Top comments (0)