{"id":"confetti-burst","version":"1.0.0","title":"Confetti Burst","summary":"A cannon fires hundreds of tumbling paper confetti in the party colours: they fly, flutter and drift down. One-shot, seeded and exact.","kind":"effect","target":"canvas2d","collections":["particles","satisfying"],"tags":["confetti","celebration","party","burst","cannon","paper","particles","win","launch","effect"],"loopable":false,"motion":"procedural","durationSeconds":6,"status":"published","media":{"poster":"https://aipixelwizard.com/media/confetti-burst/1.0.0/poster.webp","preview":"https://aipixelwizard.com/media/confetti-burst/1.0.0/preview.mp4","sample":"https://aipixelwizard.com/media/confetti-burst/1.0.0/sample.mp4","sampleBytes":2553679,"sampleNote":"Pre-rendered with the default settings. Customised settings must be exported locally (npm run render)."},"urls":{"page":"https://aipixelwizard.com/visuals/confetti-burst","manifest":"https://aipixelwizard.com/api/v1/visuals/confetti-burst/versions/1.0.0","agentMd":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/agent.md","files":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/","demo":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/index.html"},"description":"A celebration: a cannon at the bottom of the frame fires hundreds of pieces of paper confetti. Each piece is a small rectangle, ribbon or disc with its own colour, speed and spin; it flies on an arc with air drag, tumbles in 3D (it thins to a line when edge-on and darkens on its underside) and flutters down. Choose the number of pieces, the colours (party, gold, pastel or mono), the launch (one cannon, two corner cannons or a shower from above), the power, the seed and the backdrop colour.","role":"Effect overlay (Canvas 2D): the celebration moment for wins, launches and milestones.","useCases":["A win, milestone or launch moment","A birthday, holiday or event greeting","A reveal that needs a pop"],"synonyms":["party popper","confetti cannon","confetti explosion","celebration effect","ticker tape","streamers"],"digest":"bcd7c26c0267f6c44112b0049428e8e69d9bcf8419ca5d2b1709cf43d069d8c3","implementation":{"target":"canvas2d","runtime":"browser","language":"javascript","module":"esm","entry":"src/confetti-burst.js","exports":[{"name":"createConfettiBurst","signature":"createConfettiBurst({ pieces?, palette?, at?, mode?, power?, seed? }) => { draw(ctx, info, width, height), revealDuration }","description":"Canvas 2D effect layer driven by info.time (seconds); draws on top of the canvas."},{"name":"PALETTES","signature":"PALETTES: { party, gold, pastel, mono }","description":"Confetti colour sets."}],"reusable":["src/confetti-burst.js"],"demo":"demo.js","harness":"index.html"},"dependencies":[{"id":"apw-runtime","version":"1.0.0","scope":"demo","reason":"Demo harness. The reusable source has no dependencies."}],"uses":[],"usedBy":[],"params":[{"key":"pieces","label":"Pieces","type":"integer","min":60,"max":900,"step":10,"default":420},{"key":"palette","label":"Colours","type":"select","default":"party","options":[{"value":"party","label":"Party"},{"value":"gold","label":"Gold"},{"value":"pastel","label":"Pastel"},{"value":"mono","label":"Mono"}]},{"key":"mode","label":"Launch","type":"select","default":"cannon","options":[{"value":"cannon","label":"One cannon"},{"value":"twin","label":"Two cannons"},{"value":"rain","label":"Shower from above"}]},{"key":"power","label":"Power","type":"number","min":0.6,"max":1.5,"step":0.1,"default":1},{"key":"seed","label":"Seed","type":"integer","min":1,"max":999,"step":1,"default":21},{"key":"background","label":"Backdrop","type":"color","default":"#1b1530"}],"presets":[{"id":"default","label":"Party cannon","params":{}},{"id":"gold","label":"Gold, two cannons","params":{"palette":"gold","mode":"twin","background":"#14110a"}},{"id":"pastel","label":"Pastel shower","params":{"palette":"pastel","mode":"rain","pieces":300,"background":"#2a2540"}},{"id":"mono","label":"Mono, big blast","params":{"palette":"mono","power":1.4,"pieces":700,"background":"#101218"}}],"output":{"width":1080,"height":1080,"fps":30,"durationSeconds":6,"posterSeconds":1.4,"alpha":false,"motion":"procedural","loop":{"seamless":false,"method":"Not a loop: the burst fires at 0.6 s and the pieces fall out of frame."},"seed":{"param":"seed","behavior":"Seed gives every piece its colour, shape, speed, spin and flutter: same seed, same burst."}},"composition":{"inputs":"Canvas 2D context, info.time (seconds), width, height.","outputs":"Draws the confetti on top of the canvas; does not clear it.","coordinates":"Positions are fractions of the canvas; the cannon is at the bottom centre (or the corners), the shower starts above the top edge; sizes scale with the smaller side.","lighting":"None; undersides are drawn darker.","timing":"Pure function of time since the burst and a seeded number per piece; revealDuration says when the last piece has gone.","compatibleWith":["kinetic-title","gradient-background"],"notes":["Each piece follows v(t) = v0 e^(−kt) with a terminal fall speed, so frames can be rendered in any order."]},"reuse":["Win moment: Party cannon.","Premium launch: Gold, two cannons.","Soft greeting: Pastel shower."],"integration":{"newProject":"Create the burst once, then each frame draw your picture and call burst.draw(ctx, { time: frame / fps }, width, height).","existingProject":"Copy src/confetti-burst.js. Call draw on your existing 2D canvas after the rest of the frame."},"performance":{"notes":"Up to 900 small shapes per frame; about 2 ms on an integrated GPU.","limits":"The frame is not cleared; call it after your backdrop."},"limitations":["Pieces do not collide or pile up on the ground; they leave the frame.","The 3D tumble is simulated by squashing flat shapes, not true 3D."],"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":"Original code written for AI Pixel Wizard in October 2026, to the catalog quality bar (docs/QUALITY.md).","changelog":[{"version":"1.0.0","date":"2026-10-08","notes":"Initial release."}],"verification":{"testedOn":"2026-10-08","inputs":{"confetti-burst@1.0.0":"bcd7c26c0267f6c44112b0049428e8e69d9bcf8419ca5d2b1709cf43d069d8c3","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":"Canvas 2D","width":1080,"height":1080,"fps":30,"frames":180,"renderSeconds":19.3,"loopCheck":{"checked":false,"seamless":null,"maxDifference":null,"note":"Asset does not claim a seamless loop."},"determinism":{"checked":true,"identical":true},"errors":[],"media":{"poster":"/media/confetti-burst/1.0.0/poster.webp","preview":"/media/confetti-burst/1.0.0/preview.mp4","sample":"/media/confetti-burst/1.0.0/sample.mp4","sampleBytes":2553679}},"files":[{"path":"LICENSE","size":1072,"sha256":"8a5f3a96f07e11522ec4bdd0a583356f99bad1245920f9709cee09b995a45153","contentType":"text/plain; charset=utf-8","url":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/LICENSE"},{"path":"asset.json","size":6948,"sha256":"065e1a63c5ad33339fa0bf65db6271b0649b616cb1aa136468b90e7549580296","contentType":"application/json; charset=utf-8","url":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/asset.json"},{"path":"demo.js","size":870,"sha256":"e0e9d8bf8abd6ca597cc7b965bbd740c83c40ee62f49c8569a45459ac35a1bbd","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/demo.js"},{"path":"index.html","size":528,"sha256":"e30be66a89ca7967ca53cf48108d4d6c47f217c15767284ecadc4953ee671daa","contentType":"text/html; charset=utf-8","url":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/index.html"},{"path":"src/confetti-burst.js","size":4949,"sha256":"676f6cf3df021505eb2d50d1760a106297991fe15a68d8d110b2b81e3cb379e1","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/confetti-burst/1.0.0/src/confetti-burst.js"}],"warnings":[]}