{"id":"glazed-galaxy","version":"1.0.0","title":"Glazed Galaxy","summary":"Dozens of rainbow-glazed donuts spiral round a big one at the centre like a galaxy, tumbling as they go. Loops perfectly.","kind":"object","target":"three","collections":["satisfying","particles","hypnotic-loops"],"tags":["donuts","galaxy","spiral","orbit","rainbow","glaze","sweet","playful","studio","loop","3d"],"loopable":true,"motion":"procedural","durationSeconds":16,"status":"published","media":{"poster":"https://aipixelwizard.com/media/glazed-galaxy/1.0.0/poster.webp","preview":"https://aipixelwizard.com/media/glazed-galaxy/1.0.0/preview.mp4","sample":"https://aipixelwizard.com/media/glazed-galaxy/1.0.0/sample.mp4","sampleBytes":4531305,"sampleNote":"Pre-rendered with the default settings. Customised settings must be exported locally (npm run render)."},"urls":{"page":"https://aipixelwizard.com/visuals/glazed-galaxy","manifest":"https://aipixelwizard.com/api/v1/visuals/glazed-galaxy/versions/1.0.0","agentMd":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/agent.md","files":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/","demo":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/index.html"},"description":"A galaxy made of donuts: dozens of small glazed donuts swirl round a big one at the centre along the arms of a spiral, the inner ones racing and the outer ones drifting, each tumbling as it goes and every glaze a different colour of the rainbow. Choose the number of donuts, the number of spiral arms, how strong the glaze colours are, how many laps the outermost donuts make per loop, the seed, the backdrop colour and whether the camera sways.","role":"Object (3D, three.js): a playful, colourful scene for food, party and kids' content with a galaxy twist.","useCases":["A bakery or sweets brand scene","A playful party or kids' content backdrop","A colourful orbiting-objects loop"],"synonyms":["donut galaxy","doughnut spiral","orbiting donuts","sprinkle galaxy","candy galaxy","bakery orbit"],"digest":"323062582b53f6d67776355e208805946f7a3f7e4c5c9461ee7bdd107957cf89","implementation":{"target":"three","runtime":"browser","language":"javascript","module":"esm","entry":"src/glazed-galaxy.js","exports":[{"name":"createGlazedGalaxy","signature":"createGlazedGalaxy({ count?, arms?, saturation?, laps?, seed? }) => { group, setProgress(progress), dispose() }","description":"The donut galaxy as two instanced meshes (dough and frosting), about 14 across; needs an environment map."}],"reusable":["src/glazed-galaxy.js"],"demo":"demo.js","harness":"index.html"},"dependencies":[{"id":"three","version":"0.185.1","scope":"source","reason":"Renderer, geometry and shader materials."},{"id":"chrome-material","version":"1.1.0","scope":"demo","reason":"Studio environment light, backdrop and contact shadow."},{"id":"apw-runtime","version":"1.0.0","scope":"demo","reason":"Demo harness."}],"uses":[],"usedBy":[],"params":[{"key":"count","label":"Donuts","type":"integer","min":16,"max":120,"step":2,"default":64},{"key":"arms","label":"Spiral arms","type":"integer","min":1,"max":6,"step":1,"default":3},{"key":"saturation","label":"Glaze colour","type":"number","min":0.2,"max":1,"step":0.05,"default":0.9},{"key":"laps","label":"Outer laps per loop","type":"integer","min":1,"max":3,"step":1,"default":1},{"key":"seed","label":"Seed","type":"integer","min":1,"max":999,"step":1,"default":8},{"key":"background","label":"Backdrop","type":"color","default":"#1a1630"},{"key":"orbit","label":"Camera sway","type":"boolean","default":true}],"presets":[{"id":"default","label":"Three arms, rainbow","params":{}},{"id":"pastel","label":"Pastel, many","params":{"count":100,"saturation":0.4,"arms":5,"background":"#2a2438"}},{"id":"fast","label":"Fast laps, two arms","params":{"arms":2,"laps":3,"count":48,"background":"#101c2a"}},{"id":"bold","label":"Bold, one arm","params":{"arms":1,"saturation":1,"seed":21,"background":"#2a1020"}}],"output":{"width":1080,"height":1080,"fps":30,"durationSeconds":16,"posterSeconds":4,"alpha":false,"motion":"procedural","loop":{"seamless":true,"cycleSeconds":16,"method":"Every donut makes a whole number of laps per loop and turns a whole number of times, its tilts and bob are sines of whole cycles and the camera sway is a sine of the loop, so the last frame meets the first."},"seed":{"param":"seed","behavior":"Seed places the donuts along the arms and gives them sizes, tilts and spins, and shapes the frosting edge: same seed, same galaxy."}},"composition":{"inputs":"Time within the loop; the count, arms, glaze colour, laps, seed, backdrop and camera sway.","outputs":"A full frame rendered in 3D with a studio environment.","coordinates":"The big donut sits at the origin (height 1.1); small donuts orbit at radius 2.6–7.2 in the xz plane; the camera looks down at about 52°.","lighting":"A warm key light with a shadow map, a shadow-catching floor and the studio environment.","timing":"setProgress(progress) places every donut on its orbit; frames render in any order.","compatibleWith":["chrome-material","orbit-camera","kinetic-title","number-reveal"],"notes":["All donuts share one frosting shape; each is tinted by an instance colour from the rainbow along the spiral."]},"reuse":["Playful brand: Three arms, rainbow.","Soft: Pastel, many.","Energetic: Fast laps, two arms."],"integration":{"newProject":"Create a WebGLRenderer with a studio environment and a shadow-casting light, add createGlazedGalaxy().group and call galaxy.setProgress(progress) each frame.","existingProject":"Copy src/glazed-galaxy.js; add the group to your scene with an environment map."},"performance":{"notes":"Two instanced draw calls of up to 121 donuts with a shadow map: about a millisecond a frame on an integrated Intel GPU.","limits":"Software WebGL renders in about a second a frame."},"limitations":["All frostings share one shape, tinted differently.","Donuts may overlap where arms cross near the centre."],"license":{"spdx":"MIT","notice":"Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.","thirdParty":[]},"rights":{"approvedForPublicRelease":true},"provenance":"Adapted from the owner's threejs-sketches/objects-scenes/glazed-galaxy (MIT) and rebuilt for AI Pixel Wizard in October 2026 as an original studio object: instanced baked-dough donuts with a shared wavy frosting strip orbiting along logarithmic spiral arms with whole laps per loop.","changelog":[{"version":"1.0.0","date":"2026-10-05","notes":"Initial release."}],"verification":{"testedOn":"2026-10-05","inputs":{"glazed-galaxy@1.0.0":"323062582b53f6d67776355e208805946f7a3f7e4c5c9461ee7bdd107957cf89","three@0.185.1":"664ca387e5fab46ff2daaa6895e1d015426850891af5ea5082cbbcc3985b068c","chrome-material@1.1.0":"ecb41776bfc1ee88997604f916a5ffe833f971d7edcc97c855697a5792d6f1dd","apw-runtime@1.0.0":"5be859cdac74823ba0bcc32c6daf06688a871104d24db5d4ceaffffd84d7c40d"},"environment":"Chrome 154.0.8037.97 headless on Linux 7.0.0-38-generic (x64), Node 22.14.0","renderer":"WebGL 2 via SwiftShader (software)","width":1080,"height":1080,"fps":30,"frames":480,"renderSeconds":4395,"loopCheck":{"checked":true,"seamless":true,"maxDifference":0,"note":"Frame 0 vs end state (progress 1): mean |Δ| 0.0000, max |Δ| 0 of 255."},"determinism":{"checked":true,"identical":true},"errors":[],"media":{"poster":"/media/glazed-galaxy/1.0.0/poster.webp","preview":"/media/glazed-galaxy/1.0.0/preview.mp4","sample":"/media/glazed-galaxy/1.0.0/sample.mp4","sampleBytes":4531305}},"files":[{"path":"LICENSE","size":1072,"sha256":"8a5f3a96f07e11522ec4bdd0a583356f99bad1245920f9709cee09b995a45153","contentType":"text/plain; charset=utf-8","url":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/LICENSE"},{"path":"asset.json","size":7126,"sha256":"104e28be96cff03d9272f82f3f2ab8d956325199dfb3d5adb46f4fa06fcc2643","contentType":"application/json; charset=utf-8","url":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/asset.json"},{"path":"demo.js","size":2425,"sha256":"b433b6c9e3b95328e3e8abc67c84553ecaa9bafc714c6c4b33416ef2b8cb67e2","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/demo.js"},{"path":"index.html","size":527,"sha256":"88e2c87c64691a2ee1fb531e2c7382ae8363d8c2154486c03e1bdb270310531b","contentType":"text/html; charset=utf-8","url":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/index.html"},{"path":"src/glazed-galaxy.js","size":6454,"sha256":"12bb2db36f32296dfe97700d0ee49beaaa4476b1f199870ff9346f30286df520","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/glazed-galaxy/1.0.0/src/glazed-galaxy.js"}],"warnings":[]}