Gaming: Achievement Badges & Leaderboard Images

Gaming: Achievement Badges & Leaderboard Images

Players grind for hours to unlock achievements. The least you can do is make those achievements look incredible.

A generic "Achievement Unlocked" popup doesn't cut it anymore. Players want personalized badges with their name, their stats, their rank. They want to screenshot it, share it on Discord, post it on Twitter. And if your game has leaderboards, players expect polished ranking graphics, not a plain text list.

The challenge? Every badge is unique per player. Every leaderboard reshuffles after every match. You can't pre-design thousands of individual images. But you can template them and generate on demand. I've built achievement systems for two indie studios, and the approach is always the same.

What gaming platforms needWhat Gaming Platforms Need

Games and gaming platforms generate several types of player-specific images:

Achievement badges:

  • Milestone unlocks ("First 100 Kills," "Level 50 Reached")
  • Rare achievement cards (with player name and date earned)
  • Seasonal event badges (holiday events, limited-time challenges)
  • Rank-up notifications (Bronze → Silver → Gold)

Leaderboard graphics:

  • Daily/weekly/monthly top player rankings
  • Tournament brackets and results
  • Season standings with player avatars
  • Guild/clan leaderboards

Player cards:

  • Profile summary cards (stats, rank, main character)
  • Match recap images (K/D, score, MVP status)
  • Social sharing cards ("I just hit Diamond rank!")
  • Streamer overlays with live stats

Every one of these is a fixed design with variable player data. That's what template-based generation is built for. If you're new to the concept, our what is an image API explainer covers how it all works.

Designing achievement badge templatesDesigning Achievement Badge Templates

Good achievement badges feel like trophies. Players should want to collect them.

Template structure:

  • Achievement icon or artwork (fixed per achievement type)
  • Player name (dynamic)
  • Achievement title ("Dragon Slayer," "Speed Demon")
  • Description or stat ("Defeated 100 dragons" or "Completed in 4:32")
  • Date earned
  • Rarity indicator (Common, Rare, Epic, Legendary)
  • Background effect matching rarity (subtle for Common, glowing for Legendary)

Rarity tiersRarity Tiers

RarityColor SchemeDesign Style
CommonGray/silverClean, minimal
RareBlueSlight glow effect
EpicPurpleParticle effects, metallic
LegendaryGold/orangeFull glow, animated border feel

Create a template variant for each rarity tier in Imejis.io. When a player earns an achievement, pick the template matching its rarity and fill in the player data.

Generating badges via apiGenerating Badges via API

When a player unlocks an achievement, one call does the job:

curl -X POST 'https://render.imejis.io/v1/LEGENDARY_BADGE_TEMPLATE' \
  -H 'dma-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "player_name": {
      "text": "xDragonSlayer99"
    },
    "achievement_title": {
      "text": "Dragon Slayer"
    },
    "achievement_desc": {
      "text": "Defeated 100 dragons in ranked mode"
    },
    "date_earned": {
      "text": "Apr 12, 2026"
    },
    "player_avatar": {
      "image": "https://yourgame.com/avatars/player-12345.png"
    },
    "rarity": {
      "text": "LEGENDARY"
    }
  }'

Badge generated in under 2 seconds. Display it in-game, push it as a notification, or store it in the player's trophy case. For a full walkthrough of your first API call, see how to generate images with an API.

Building dynamic leaderboardsBuilding Dynamic Leaderboards

Static leaderboard screenshots are boring. Dynamic ones that regenerate with current data are shareable content.

Leaderboard template designLeaderboard Template Design

A good leaderboard image shows:

  • Top 10 (or top 5) players
  • Each player's rank, name, avatar, and score
  • Visual distinction for 1st/2nd/3rd (gold, silver, bronze highlights)
  • Time period (daily, weekly, season)
  • Your game's branding

Generating the leaderboardGenerating the Leaderboard

Pull rankings from your game server and format them for the template:

async function generateLeaderboard(period = "weekly") {
  const topPlayers = await getTopPlayers(period, 10)
 
  const templateData = {}
  topPlayers.forEach((player, index) => {
    const rank = index + 1
    templateData[`rank_${rank}_name`] = { text: player.displayName }
    templateData[`rank_${rank}_score`] = { text: player.score.toLocaleString() }
    templateData[`rank_${rank}_avatar`] = { image: player.avatarUrl }
  })
 
  templateData["period"] = {
    text: `${period.charAt(0).toUpperCase() + period.slice(1)} Rankings`,
  }
  templateData["updated"] = { text: new Date().toLocaleDateString() }
 
  const image = await generateImage("LEADERBOARD_TEMPLATE", templateData)
  return image
}
 
// Generate and post to Discord every hour
setInterval(async () => {
  const leaderboard = await generateLeaderboard("daily")
  await postToDiscord(leaderboard, "#leaderboards")
}, 3600000)

Auto posting to discordAuto-Posting to Discord

Most gaming communities live on Discord. Post leaderboard updates automatically:

const { WebhookClient } = require("discord.js")
const webhook = new WebhookClient({ url: process.env.DISCORD_WEBHOOK_URL })
 
async function postLeaderboardToDiscord(imageBuffer) {
  await webhook.send({
    content: "🏆 **Daily Leaderboard Update**",
    files: [{ attachment: imageBuffer, name: "leaderboard.png" }],
  })
}

We've got a full guide on building Discord bots for image generation if you want deeper integration.

Player cards for social sharingPlayer Cards for Social Sharing

When a player hits a milestone, give them something worth sharing.

Player card template includes:

  • Player name and avatar
  • Current rank and rank icon
  • Key stats (wins, K/D ratio, hours played)
  • Favorite character or loadout
  • Season or lifetime stats
curl -X POST 'https://render.imejis.io/v1/PLAYER_CARD_TEMPLATE' \
  -H 'dma-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "player_name": {
      "text": "xDragonSlayer99"
    },
    "player_avatar": {
      "image": "https://yourgame.com/avatars/player-12345.png"
    },
    "rank": {
      "text": "Diamond II"
    },
    "rank_icon": {
      "image": "https://yourgame.com/ranks/diamond.png"
    },
    "wins": {
      "text": "1,247"
    },
    "kd_ratio": {
      "text": "2.34"
    },
    "hours_played": {
      "text": "892"
    },
    "main_character": {
      "text": "Wraith"
    }
  }'

Size it at 1200x630px for Twitter/Facebook OG sharing. When players post their card, their followers see the game branding. Free marketing.

Match recap imagesMatch Recap Images

After each match, generate a recap image showing the player's performance:

What to include:

  • Match result (Victory/Defeat)
  • Player's stats for that match
  • MVP or highlight callout if applicable
  • Map name and game mode
  • Squad members (if team-based)

These are highly shareable. Players love posting their best matches. Some games (like Valorant and Apex Legends) already do this natively, but most indie and mid-size games don't. Adding this feature sets you apart. According to Newzoo's Global Games Market Report, player engagement features like achievements and shareable content directly correlate with retention and monetization.

Seasonal and event badgesSeasonal and Event Badges

Limited-time events drive engagement. Exclusive badges drive FOMO.

Seasonal badge strategy:

  • Design event-specific templates with unique visual themes
  • Generate badges only during the event window
  • Include the event name and year ("Halloween 2026")
  • Mark them as limited edition in the player's collection

Players who miss the event can't earn the badge. That exclusivity makes them more valuable and keeps players coming back for future events. The same template-based approach works for education certificates and student IDs if you're looking at other personalization use cases.

Integration patternsIntegration Patterns

Unity cUnity (C#)

using UnityEngine;
using UnityEngine.Networking;
 
IEnumerator GenerateAchievementBadge(string playerName, string achievement)
{
    var jsonData = $@"{{
        ""player_name"": {{""text"": ""{playerName}""}},
        ""achievement_title"": {{""text"": ""{achievement}""}}
    }}";
 
    var request = new UnityWebRequest(
        "https://render.imejis.io/v1/BADGE_TEMPLATE",
        "POST"
    );
    request.uploadHandler = new UploadHandlerRaw(
        System.Text.Encoding.UTF8.GetBytes(jsonData)
    );
    request.downloadHandler = new DownloadHandlerBuffer();
    request.SetRequestHeader("dma-api-key", "YOUR_API_KEY");
    request.SetRequestHeader("Content-Type", "application/json");
 
    yield return request.SendWebRequest();
 
    if (request.result == UnityWebRequest.Result.Success)
    {
        // Display badge texture in game UI
        var texture = new Texture2D(512, 512);
        texture.LoadImage(request.downloadHandler.data);
        badgeDisplay.texture = texture;
    }
}

Nodejs game serverNode.js Game Server

const axios = require("axios")
 
async function onAchievementUnlocked(playerId, achievementId) {
  const player = await getPlayer(playerId)
  const achievement = getAchievementConfig(achievementId)
 
  const rarityTemplates = {
    common: "COMMON_BADGE_ID",
    rare: "RARE_BADGE_ID",
    epic: "EPIC_BADGE_ID",
    legendary: "LEGENDARY_BADGE_ID",
  }
 
  const response = await axios.post(
    `https://render.imejis.io/v1/${rarityTemplates[achievement.rarity]}`,
    {
      player_name: { text: player.displayName },
      achievement_title: { text: achievement.title },
      achievement_desc: { text: achievement.description },
      player_avatar: { image: player.avatarUrl },
      date_earned: { text: new Date().toLocaleDateString() },
    },
    {
      headers: {
        "dma-api-key": process.env.IMEJIS_API_KEY,
        "Content-Type": "application/json",
      },
      responseType: "arraybuffer",
    }
  )
 
  // Store badge and notify player
  await saveBadge(playerId, achievementId, response.data)
  await notifyPlayer(playerId, "Achievement unlocked!", achievement.title)
}

Cost for game studiosCost for Game Studios

Game SizeMonthly Badges/ImagesPlanCost
Indie (1K MAU)~500Free tier$0
Mid-size (10K MAU)~5,000Pro$24.99/month
Large (50K MAU)~25,000EnterpriseCustom

Compare that to hiring an artist to manually create personalized player content. It's not even close. For a full cost breakdown across providers, see our image generation API pricing comparison.

Check our pricing for the full breakdown.

FaqFAQ

Can i generate achievement badges in real time during gameplayCan I generate achievement badges in real time during gameplay?

Yes. The API returns images in under 2 seconds. When a player unlocks an achievement, call the API with their name and achievement details, then display the badge in-game or push it as a notification. Fast enough for real-time use.

How do i create leaderboard images that update automaticallyHow do I create leaderboard images that update automatically?

Pull the top player data from your game server, pass it to a leaderboard template via API, and regenerate on a schedule (hourly, daily, or after each match). Share the updated image to Discord, social media, or your game's website.

What sizes work best for gaming imagesWhat sizes work best for gaming images?

Achievement badges: 512x512px for in-game display, 256x256px for thumbnails. Leaderboard images: 1080x1920px for Discord/mobile, 1920x1080px for desktop. Player cards: 1200x630px for social sharing, 400x600px for in-game profiles.

Can players share their achievements on social mediaCan players share their achievements on social media?

Yes. Generate a social-optimized version (1200x630px) of the achievement with the player's name, avatar, and stats. Provide a share link that includes the pre-generated image as the OG image. When shared, it displays the personalized achievement card.

How much does it cost to generate gaming images at scaleHow much does it cost to generate gaming images at scale?

Imejis.io starts at $14.99/month for 1,000 images. A game with 5,000 monthly active players generating 2 badges each needs 10,000 images, covered by the Pro tier at $24.99/month. That's $0.0025 per badge.

Make every achievement worth showing offMake Every Achievement Worth Showing Off

Your players are earning achievements. They're climbing leaderboards. They're hitting milestones. Give them images that match the effort they put in.

A personalized, well-designed badge turns a database record into a trophy. A shareable player card turns every proud moment into free marketing for your game.

Template the designs. Automate the generation. Let your players do the rest.

Get started with Imejis.io →