Upload your own images, or pick emoji, Font Awesome and Lucide icons, and watch them bounce around a box like the old DVD-logo screensaver. Mix and match as many as you want. When it looks right, copy one script tag and paste it onto any page you control — nothing here ever touches a server, and the page that ends up using it needs nothing else installed.
Add at least one layer to generate your embed code.
No layers yet. Add an image, an emoji, or an icon to get started.
Once you've added at least one layer above, "Get The Code" prints a snippet with three pieces. You paste the whole thing, as-is, onto your own page -- nothing here needs a build step, a package install, or a framework.
<div> -- the box the animation lives inThis is just an empty container with an id, e.g. <div id="my-awesome-background"></div>. Its size on the page (width and height, from your own CSS) is the size of the bouncing area -- make it as big as you want the effect to cover: a header, a full section, or the whole page. Any real content you put inside that div (text, a headline, a button) should get position: relative so it stays visually on top of the animation instead of underneath it.
<script src> tag -- the engine, loaded onceThis pulls in the small, dependency-free script that actually knows how to move sprites around and bounce them off the edges of a box. It's the same file this page itself uses. You only need this tag once per page, no matter how many backgrounds you add to that page.
AwesomeBackgrounds.init(...) call -- your specific layers and speedThis is the part that's actually yours: it points at the div by its id and hands over the exact images/emoji/icons and sizes/speed you configured above, already baked into plain image data -- so the page loading this never has to fetch Font Awesome, Lucide, or any font or icon library at all.
</body> tag. Save, upload, done.min-height: 300px) or inherited from its parent -- an animation inside a div with no height has nowhere to bounce.<script> tags loaded -- open your browser's developer console (F12) and look for a red error mentioning awesome-backgrounds.js or AwesomeBackgrounds.AwesomeBackgrounds.init(...) runs after the div exists on the page -- pasting it right before </body>, as shown, already guarantees this.position: relative to that content (not the outer div) so normal stacking order puts it back on top.