{"id":"snow-globe","version":"1.0.0","title":"Snow Globe","summary":"A glass snow globe on a wooden pedestal: shaken once, the snow swirls and settles round a tiny winter scene. Loops perfectly.","kind":"object","target":"three","collections":["chrome-glass","product-reveals","satisfying"],"tags":["snow globe","christmas","winter","holiday","snow","glass","cozy","cabin","snowman","gift","loop","3d"],"loopable":true,"motion":"procedural","durationSeconds":12,"status":"published","media":{"poster":"https://aipixelwizard.com/media/snow-globe/1.0.0/poster.webp","preview":"https://aipixelwizard.com/media/snow-globe/1.0.0/preview.mp4","sample":"https://aipixelwizard.com/media/snow-globe/1.0.0/sample.mp4","sampleBytes":2225725,"sampleNote":"Pre-rendered with the default settings. Customised settings must be exported locally (npm run render)."},"urls":{"page":"https://aipixelwizard.com/visuals/snow-globe","manifest":"https://aipixelwizard.com/api/v1/visuals/snow-globe/versions/1.0.0","agentMd":"https://aipixelwizard.com/registry/snow-globe/1.0.0/agent.md","files":"https://aipixelwizard.com/registry/snow-globe/1.0.0/","demo":"https://aipixelwizard.com/registry/snow-globe/1.0.0/index.html"},"description":"A snow globe on a turned wooden pedestal, in a dark, cosy room whose lights show upside down in the glass. Inside, a tiny winter scene under a sphere of liquid glass: a log cabin with glowing windows, a decorated Christmas tree with presents, or a snowman by a lamp post. The globe is picked up and shaken once: the flakes lift, swirl and drift back down onto the snow, and by the end of the loop it is at rest again. Or leave it still and let the snow fall gently for ever. A brass plaque on the front carries your own words. Choose the scene, the wood, the colour of the liquid, the amount of snow and how hard it is shaken, and the room's lights: golden, Christmas or cool.","role":"Hero object (Three.js 3D): a festive, nostalgic snow globe for holiday content.","useCases":["A Christmas, New Year or winter-holiday greeting, with your own words on the plaque","A cosy intro or end card for seasonal videos and promotions","A gift-voucher or product backdrop with a festive feel"],"synonyms":["snowglobe","christmas globe","winter globe","shaking snow globe","holiday snow","crystal ball snow","festive card","christmas background"],"digest":"5519ab0fb96cabe4b2bf2dc81de2333851ec60f9565b563dd1ebd10d5098cc5a","implementation":{"target":"three","runtime":"browser","language":"javascript","module":"esm","entry":"src/snow-globe.js","exports":[{"name":"createSnowGlobe","signature":"createSnowGlobe({ scene?, base?, plaque?, snow?, tint?, seed?, anisotropy? }) => { group, sphere, height, lift(progress), update(time, loopSeconds, { mode?, shake? }), dispose() }","description":"The whole globe as a THREE.Group (1 unit = 10 cm, standing on y = 0). update(time, loopSeconds) shakes it once and lets the snow settle, or just lets it fall."},{"name":"createBokehBackdrop","signature":"createBokehBackdrop(theme?, seed?) => { mesh, dispose() }","description":"A backdrop of out-of-focus lights made of opaque material, so the glass can refract it."},{"name":"BASES","signature":"BASES: { walnut, mahogany, ebony }","description":"Pedestal finishes."},{"name":"SCENES","signature":"SCENES: ['cabin', 'tree', 'snowman']","description":"The tiny scenes inside."}],"reusable":["src/snow-globe.js"],"demo":"demo.js","harness":"index.html"},"dependencies":[{"id":"three","version":"0.185.1","scope":"source","reason":"Renderer, geometry and physical glass (transmission)."},{"id":"chrome-material","version":"1.1.0","scope":"demo","reason":"Studio environment light and the contact shadow."},{"id":"apw-runtime","version":"1.0.0","scope":"demo","reason":"Demo harness."}],"uses":[],"usedBy":[],"params":[{"key":"scene","label":"Scene inside","type":"select","default":"cabin","options":[{"value":"cabin","label":"Log cabin"},{"value":"tree","label":"Christmas tree"},{"value":"snowman","label":"Snowman and lamp post"}]},{"key":"mode","label":"Snow","type":"select","default":"shake","options":[{"value":"shake","label":"Shaken once, then settles"},{"value":"snowfall","label":"Gentle snowfall for ever"}]},{"key":"plaque","label":"Plaque","help":"The words engraved on the brass plaque.","type":"text","default":"Winter Dreams","maxLength":24,"sensitive":true},{"key":"base","label":"Pedestal","type":"select","default":"walnut","options":[{"value":"walnut","label":"Walnut"},{"value":"mahogany","label":"Mahogany"},{"value":"ebony","label":"Black lacquer"}]},{"key":"snow","label":"Amount of snow","type":"number","min":0.3,"max":1.6,"step":0.1,"default":1},{"key":"shake","label":"Shake","type":"number","min":0,"max":1.5,"step":0.1,"default":1},{"key":"tint","label":"Liquid","type":"color","default":"#e6f1ff"},{"key":"lights","label":"Room lights","type":"select","default":"warm","options":[{"value":"warm","label":"Golden"},{"value":"christmas","label":"Christmas"},{"value":"cool","label":"Cool blue"}]},{"key":"table","label":"Table","type":"color","default":"#1c1512"},{"key":"seed","label":"Seed","help":"Changes the flakes, the wood grain and the lights behind.","type":"integer","min":1,"max":999,"step":1,"default":3}],"presets":[{"id":"default","label":"Cabin, shaken","params":{}},{"id":"tree","label":"Christmas tree","params":{"scene":"tree","plaque":"Merry Christmas","base":"mahogany","lights":"christmas","seed":7}},{"id":"snowman","label":"Snowman, gentle snowfall","params":{"scene":"snowman","mode":"snowfall","plaque":"Let it snow","base":"ebony","lights":"cool","tint":"#dbe8ff","table":"#10131a","seed":11}},{"id":"blizzard","label":"Cabin in a blizzard","params":{"mode":"snowfall","plaque":"Home for the holidays","snow":1.6,"lights":"cool","table":"#14110f","seed":5}}],"output":{"width":1080,"height":1080,"fps":30,"durationSeconds":12,"posterSeconds":3,"alpha":false,"motion":"procedural","loop":{"seamless":true,"cycleSeconds":12,"method":"Shaken: the snow starts and ends at rest on the ground and the shake is zero before and after it. Snowfall: every flake falls through the globe a whole number of times and sways in whole cycles. Either way the last frame meets the first."},"seed":{"param":"seed","behavior":"Seed places the flakes, grains the wood and scatters the lights behind: same seed, same globe."}},"composition":{"inputs":"Time within the loop; the scene, snow mode, plaque text, pedestal, liquid colour and room lights.","outputs":"A THREE.Group: pedestal, plaque, glass globe, the tiny scene and the flakes, standing on y = 0.","coordinates":"1 unit = 10 cm. The globe's sphere has a radius of 2.05 and is centred 2.73 above the table; the pedestal is 4 across.","lighting":"Physical glass and brass: needs scene.environment. The tiny scene carries its own warm lights. The glass refracts opaque meshes only, so a backdrop (createBokehBackdrop) must be opaque to show through it.","timing":"update(time, loopSeconds) is a pure function of time; frames render in any order. lift(progress) gives the shake's lift for a contact shadow.","compatibleWith":["chrome-material","orbit-camera","kinetic-title"],"notes":["The plaque text is treated as private: not stored in shared packs unless you choose to include it.","Everything inside the globe, flakes included, is opaque: three.js transmission refracts only opaque objects.","The plaque is drawn with the system serif font."]},"reuse":["Holiday greeting: Christmas tree with your family name or a wish on the plaque, Christmas lights.","Seasonal promotion: Cabin in a blizzard behind your offer.","Looping background: Snowman, gentle snowfall, camera drift on, behind a quote."],"integration":{"newProject":"Set scene.environment (createStudioEnvironment from Chrome Material works), add a createBokehBackdrop mesh behind, add createSnowGlobe().group and call update(time, loopSeconds) each frame.","existingProject":"Copy src/snow-globe.js. Add the group to your scene (scale it to suit), keep what is behind the globe opaque, and call update(seconds, loopSeconds) every frame."},"performance":{"notes":"About 500 small instanced flakes updated on the CPU each frame, a hundred meshes inside and one transmissive sphere (which renders the opaque scene a second time). Smooth at 1080p on laptop GPUs.","limits":"Software WebGL (no GPU) renders slowly. Transmission costs a second render pass."},"limitations":["The flakes are simple opaque points, not snowflakes: they are tiny at normal size.","The shake is choreographed, not simulated: flakes never collide with the scene."],"license":{"spdx":"MIT","notice":"Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.","thirdParty":[{"name":"three.js","version":"0.185.1","license":"MIT","url":"https://github.com/mrdoob/three.js"}]},"rights":{"approvedForPublicRelease":true},"provenance":"Adapted from the owner's threejs-sketches/objects-scenes/snow-globe (MIT), rebuilt for AI Pixel Wizard in October 2026: a refracting glass sphere on a turned wooden pedestal with a brass plaque, three tiny scenes, a choreographed shake and settle (or an endless snowfall), a refractable bokeh room, and the frame/time contract.","changelog":[{"version":"1.0.0","date":"2026-10-05","notes":"Initial release."}],"verification":{"testedOn":"2026-10-06","inputs":{"snow-globe@1.0.0":"5519ab0fb96cabe4b2bf2dc81de2333851ec60f9565b563dd1ebd10d5098cc5a","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":360,"renderSeconds":3808.2,"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/snow-globe/1.0.0/poster.webp","preview":"/media/snow-globe/1.0.0/preview.mp4","sample":"/media/snow-globe/1.0.0/sample.mp4","sampleBytes":2225725}},"files":[{"path":"LICENSE","size":1072,"sha256":"8a5f3a96f07e11522ec4bdd0a583356f99bad1245920f9709cee09b995a45153","contentType":"text/plain; charset=utf-8","url":"https://aipixelwizard.com/registry/snow-globe/1.0.0/LICENSE"},{"path":"asset.json","size":10816,"sha256":"aa075583f495d5af3da0bd251eff34341b3a5a3eaf255c0b7d9000dd7123795c","contentType":"application/json; charset=utf-8","url":"https://aipixelwizard.com/registry/snow-globe/1.0.0/asset.json"},{"path":"demo.js","size":3764,"sha256":"620c47286c344fb35f2892d351d016fc98d4ee1cfaa9573445f4cb6fae608fc6","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/snow-globe/1.0.0/demo.js"},{"path":"index.html","size":524,"sha256":"976063318e44b56b35f60bf2bae2775cb6e8b746afb8e96e679d33baeb87660b","contentType":"text/html; charset=utf-8","url":"https://aipixelwizard.com/registry/snow-globe/1.0.0/index.html"},{"path":"src/snow-globe.js","size":25905,"sha256":"caa3c5fc8a5539a43e9cf9b3f6b4e984c5d6ceb1772f40c514740eb065c79995","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/snow-globe/1.0.0/src/snow-globe.js"}],"warnings":[]}