Usage patterns
Drop a pixabot into READMEs, dashboards, Discord, avatars, and more
Every pixabot URL is a plain image served with open CORS and immutable caching. That means you can embed one almost anywhere a remote image is allowed.
Share a seeded creator link
Drop a ?seed= onto the homepage to land a visitor on a deterministic pixabot without picking an ID:
https://pixabots.com/?seed=team-pablo
https://pixabots.com/?seed=launch-2026&hue=120&saturate=1.2The seed is hashed server-side (via @pixabots/core's seededId), so the same seed always resolves to the same starting bot — handy for team identity links, campaign URLs, or teaser drops. An explicit id param still wins when both are present.
GitHub README avatar
Shields and GitHub READMEs render markdown images from any HTTPS source. Pick an ID and drop it in:
Seed one from your username so you get a stable bot per profile:
import { seededId } from "@pixabots/core";
const id = seededId("your-github-username");
// https://pixabots.com/api/pixabot/{id}?size=240&animated=trueProfile / forum avatar
Any site that accepts an image URL works. Common sizes:
https://pixabots.com/api/pixabot/2156?size=128 (Mastodon/Discord profile)
https://pixabots.com/api/pixabot/2156?size=240 (Slack, GitHub display)
https://pixabots.com/api/pixabot/2156?size=480 (high-DPI profiles)GitHub's own avatar upload doesn't accept a URL — download the PNG locally first:
curl "https://pixabots.com/api/pixabot/2156?size=480" -o avatar.png
# upload avatar.png in GitHub Settings → ProfileDiscord / Slack webhook
When you post via webhook, drop a pixabot URL in the avatar field:
{
"username": "pixabot",
"avatar_url": "https://pixabots.com/api/pixabot/2156?size=128",
"content": "hello from a pixabot"
}Deterministic "avatar per user" from an email or ID
import { seededId } from "@pixabots/core";
function avatarFor(user: { email: string }) {
const id = seededId(user.email.trim().toLowerCase());
return `https://pixabots.com/api/pixabot/${id}?size=240&animated=true`;
}Same email → same pixabot, forever. No DB table needed.
Embed in a blog post / notion / substack
Most editors accept image URLs. Paste the URL directly or use the markdown syntax above. If the platform re-hosts images, the animated GIF may be converted to a static frame — link to the detail page for playback:
[see it animate](https://pixabots.com/bot/2156)Wall of pixabots
Generate a bunch with one call:
curl "https://pixabots.com/api/pixabot/batch?count=24&size=128"Returns JSON with png and gif URLs — perfect for dashboards, status pages, or team rosters.
Quick wall script
const res = await fetch("https://pixabots.com/api/pixabot/batch?count=24&size=128");
const { pixabots } = await res.json();
// Render as a grid
pixabots.map(({ id, gif }) => (
<img key={id} src={gif} width={128} height={128} alt={id} style={{ imageRendering: "pixelated" }} />
));Color-shifted variant per project
Pair seededId with a hue derived from the same seed:
import { seededId } from "@pixabots/core";
function brandedBot(project: string) {
const id = seededId(project);
// Stable hue 0–359 from the same seed
let h = 0;
for (const c of project) h = (h * 31 + c.charCodeAt(0)) % 360;
return `https://pixabots.com/api/pixabot/${id}?size=240&animated=true&hue=${h}`;
}Same project name → same bot, same tint.
Tips
- Pixabots are small (32×32 source). Use
size=128orsize=240for most web use. - All URLs are CDN-cached immutably — no rate limits on repeat fetches, and first render is one-time.
- For large embeds,
format=svgscales crisply to any size. - Set
image-rendering: pixelatedin CSS when rendering via<img>; otherwise browsers may antialias.