The guide follows your bot
When you pick a bot (in the Bots top deck, the launchpad, or the chat composer), the guide on screen changes from Gizzi to that bot’s avatar. Bots with an animated sprite sheet animate while they work. Image and vendor avatars get a gentle motion while the bot is active. With no bot selected, Gizzi stays as before. If your system is set to reduce motion, the avatar stays still.Avatar packs
In Create bot or Edit bot → Look, choose a pack and a character. Some characters have animated sheets (idle, walk, run, jump, sad, sleep, action, and a signature move); the rest are still portraits. Vendor bots use their vendor’s own mark or the avatar the vendor supplies. See Vendor bots.Build a character
Make an original 3D character for your bot in a few seconds, with no account, key, upload or AI. It’s drawn by your browser on your device and is free.- Open Create bot (or Edit bot) and go to Look.
- Choose Build a character. Drag the preview (or focus it and use the arrow keys) to turn it.
- Work through Shape → Color → Finish → Accessory:
- Shape: Round, Bean, Cloud, Star, Heart, Droplet, Cube bot, Cat, Bear, Bunny, Owl, Ghost
- Color: nine swatches, or Custom color
- Finish: Matte clay, Soft plush, Glossy vinyl, Glazed ceramic, Jelly, Brushed metal
- Accessory: None, Cap, Beanie, Headphones, Glasses, Bow, Crown, Leaf sprout, Antenna, Scarf, Star badge, Flower
- Press Use as avatar, then Create or Save. If you change the character afterwards, press Use as avatar again. Create and Save wait until you do.
The builder needs WebGL. If your browser can’t draw 3D graphics, the tab says so
and offers the sprite packs, which work everywhere.
Make an avatar from a photo
Open the bot’s Config → Edit bot → Look → From photo (or choose From photo while creating a bot).- Upload a PNG, JPEG, or WebP (up to 15 MB). On a phone you can pick from your camera roll.
- Choose a style: Pixel sprite, Chibi, or Mascot.
- Confirm that the photo is of you, or that you have the person’s permission.
- Choose a lane:
- Included with your plan: shown first when you’re signed in. Plus includes 5 photo avatars a month, Super 25, Ultra 50. Allternit pays for these; they don’t use your money or your credits. The lane shows how many are left this month (“3 of 5 left this month”). An avatar only counts if one is made, so a failed try doesn’t use one. When they’re used up, the lane shows the date they come back (the 1st of the next month, UTC) and you can still use the other two lanes. Without a Plus, Super or Ultra plan the lane is shown turned off with See plans. If it says Included avatars are paused this month, Allternit has paused the included lane for everyone; use another lane.
- ChatGPT subscription: needs a running Sessions computer, accepted ChatGPT terms in Settings → Subscriptions, and a ready ChatGPT account. If ChatGPT shows a security check, open ChatGPT on your Sessions computer, finish the check, then press Check ChatGPT again.
- OpenAI key: uses your connected key and shows the estimated cost per try. Each approved try can be billed.
- Press Make sprite. This prepares an approval card and sends nothing yet. Only Approve and make avatar sends the photo. Cancel sends nothing.
- Keep the editor open while it runs, review the square portrait, then save the bot.
For developers
-
Resolution:
resolveBotAvatarConfig(src/lib/agents/bot-avatar-config.ts) reads the editedconfig.avatarfirst, then the decoded legacy column, then the deterministic profile.BotAvatarandActiveAgentMascotshare it. -
Mascot:
useActiveSurfaceAgent(surface)(src/lib/agents/surface-agent-context.ts) resolves which bot represents a surface (surface selection, then open bot-thread metadata, then none).<ActiveAgentMascot>(src/views/bots/ActiveAgentMascot.tsx) rendersVendorAgentAvatarfor vendor bots, animates sheet avatars (avatar.pet.spriteUrl) on canvas driven byMascotActivityState, and otherwise delegates toBotAvatar. Callers:AgentModeGizziandLaunchHeader. -
Packs: the manifest is
src/views/agent-view/components/create-bot/avatar-packs.ts; files live inpublic/avatar-packs/<pack>/<sprite>.webp(512×512 portrait) and<sprite>-sheet.webp(1536×1872, 8 columns × 9 rows of 192×208 frames, rows in the order listed above, base anchored bottom-center). The asset spec isAVATAR_PACKS.mdbeside the manifest. -
Photo pipeline: Make sprite only prepares the card. Approval is the only call site of
generatePhotoSprite(src/lib/bots/photo-sprite.ts). The ChatGPT lane mints a single-use person proof foravatar.photo_spriteand submits animage.generatetask with an image input. The OpenAI lane usesgenerateImagesMediaPlanewithreferenceImage. Output is center-cropped to a PNG of at most 256 px, keeping hard edges for pixel style.buildAvatarConfigFromEditorwrites{ type: "image", uri, likeness: { source: "photo", style, consentAttestedAt } }. -
Included lane (cloud API):
GET /api/v1/avatars/photo/allowancereturns{ available, reason, plan, limit, used, remaining, resetsAt }, wherereasonisnot_configured,no_subscription,pausedorallowance_exhausted.POST /api/v1/avatars/phototakes{ photo, style, consentAttestedAt }and returns{ image, remaining, limit, resetsAt }(imageis a base64 PNG). Errors: 400 bad input or no consent, 402no_subscription, 429allowance_exhausted, 503not_configuredorpaused, 422provider_rejected, 502provider_error. Both take a Clerk session or an API token with thecomputescope. The code iscmd/allternit-cloud-api/src/routes/photo_avatars.rs. Monthly limits arephoto_avatars_per_monthon the plan list inbilling_subscriptions.rs. The server builds the prompt from the style, downscales the photo to 1024 px or less in memory, and calls OpenAI images edit (gpt-image-1, 1024×1024, medium). The source photo is never stored or logged. Each use is reserved inphoto_avatar_usage(migration044) under a lane-wide advisory lock. It’s markedusedonly when an image comes back andreleasedotherwise. A reservation that’s never settled stops counting after 10 minutes. -
Included lane spend guard: every reservation also checks the lane’s total for the month across all users. Each image is counted at $0.042, against
ALLTERNIT_AVATAR_MONTHLY_BUDGET_USD(default4.00). At the cap the lane reportspausedinstead of making a paid call. An OpenAIinsufficient_quotaor billing error releases the reservation and pauses the lane for 30 minutes. The key isOPENAI_API_KEYfrom the service’s EnvironmentFile;ALLTERNIT_AVATAR_OPENAI_API_KEYoverrides it. With no key, the allowance reportsnot_configuredand the app hides the lane. - Tests: use synthetic non-face fixtures. Never commit real source photos, generated likenesses, or screenshots containing them.
-
Build a character:
The builder saves a normal image avatar (
uriis the 512×512 transparent portrait) with an animated sheet and its recipe:The sheet is 1536×1872: 8 columns by 9 rows of 192×208 cells, with rows idle, blink, walk, run, jump, sad, sleep, action and special. That is the same layout as the pack sheets. Avatar renderers need no special case: the portrait isuriand the animation ispet.characteris only read by the editor to reopen the builder. Unknown ids or colors fall back to defaults. three.js loads lazily, only when the tab opens. Source:allternit-ai/src/lib/bots/character-builder/.