Aavegotchi 3D Renderer
Render gotchi assets from token data and renderer batch APIs.
Inputs
- Accept either
tokenIdor inventory URL withid=<tokenId>. - Target Base by default (
chainId=8453).
Outputs
- Return derived renderer hash.
- Return
/api/renderer/batchHTTP status. - Save raw batch JSON to disk.
- Save
PNG_FullandPNG_Headshotto disk when available. - Return
GLB_3DModelavailability and URL when present.
Execute
- Extract
tokenIdfrom direct input or inventory URL. - Query Goldsky Base core subgraph:
https://api.goldsky.com/api/public/project_cmh3flagm0001r4p25foufjtt/subgraphs/aavegotchi-core-base/prod/gn - Derive hash in renderer format:
<Collateral>-<EyeShape>-<EyeColor>-<Body>-<Face>-<Eyes>-<Head>-<RightHand>-<LeftHand>-<Pet> - Kick off render with
POST https://www.aavegotchi.com/api/renderer/batchusing:
force: trueverify: falserenderTypes: ["PNG_Full", "PNG_Headshot", "GLB_3DModel"]
- Poll
POST /api/renderer/batchwithverify: trueuntilavailability.exists=truefor all requested render types or timeout. - Download
proxyUrls.PNG_FullandproxyUrls.PNG_Headshotonly when correspondingavailability.exists=true. - Return the hash, kickoff + verify responses, poll summary, and saved artifact paths.
Command
Run the bundled script:
node scripts/render-gotchi-bypass.mjs --token-id 6741
Or pass an inventory URL:
node scripts/render-gotchi-bypass.mjs \
--inventory-url "https://www.aavegotchi.com/u/0x.../inventory?itemType=aavegotchis&chainId=8453&id=6741"
Use --out-dir /tmp to control artifact location (default: /tmp).
Optional polling controls:
--poll-attempts 18 --poll-interval-ms 10000
Return format
Always return:
tokenIdhash- Kickoff status, verify status, and raw JSON paths
- Poll summary (
pollAttempts,pollIntervalMs,renderReady) PNG_FullandPNG_Headshotoutput paths (or missing reason)GLB_3DModelavailability and URL when present
Troubleshooting
- If Goldsky returns no gotchi, verify
tokenIdand Base context. - If batch returns hash-format
400, verify eye mappings and right/left wearable order (index4thenindex5). - If
availability.existsisfalse, ensure kickoff usedforce:true, then keep pollingverify:trueuntil timeout. - If endpoint returns
404, verify production deployment state.