Assets

Every media file lives in the resource's assets/ folder:

HZ-Loading/assets/
├── audio/       your MP3s
├── images/      backgrounds + logo
├── video/       one MP4 (see constraints below)
└── keybinds/    SVG key icons

Dropping a file

Put a file in the right folder and it appears in the Creator's picker. Click Rescan in the editor and the list refreshes — no restart needed.

Discovery uses two sources merged together: a manifest generated when the resource is built, and a live directory scan. The manifest guarantees the shipped defaults are always found, including on hosts that sandbox directory listing; the live scan is what picks up the file you just dropped.

If your host blocks directory listing, the console says so once at boot:
[HZ-Loading] io.popen unavailable — live asset discovery off, manifest only.
On such a host, Rescan cannot see new files — list them manually in the Creator's playlist fields instead.


Backgrounds

Four types:

TypeWhat it does
imagesA playlist that crossfades. Set the interval and the crossfade duration.
videoA single video, full screen.
video + imagesVideo with the image playlist as a fallback.
generativeAn animated background generated in the browser — no file needed.
On top of any of them: darkness, grayscale, saturation, contrast and scanline effects. Auto-playlist is on by default: every image found in assets/images/ is used. Turn it off to curate a specific subset instead.

Video constraints

720p, under 5 MB, H.264. A loading screen video decodes while the game is streaming assets — on a mid-range machine an oversized file costs the player frames exactly when they have none to spare. The editor shows these limits inline next to the field.
YouTube is supported as a background source. It requires the player to have working internet at that moment, and a fallback surface is drawn behind the embed so a slow or blocked load never shows a black void.

Music

Drop MP3s in assets/audio/, or paste a direct audio URL.

Players get playlist, shuffle, skip, volume and mute controls, with elapsed / duration and a position bar. Their volume and mute choices persist between connections, and playback pauses automatically when they alt-tab.

A YouTube link is not playable as music. Only real audio files play. YouTube entries in a music playlist are filtered out, and if a playlist ends up entirely YouTube the music card hides itself rather than showing dead controls.

Either a file in assets/images/ or a full https:// URL. Logo size sets its base height in pixels; the layout editor's resize handle multiplies it on top, so a hero logo can fill a large part of the screen.

You can type logo.webp, images/logo.webp or assets/images/logo.webp — the redundant prefix is normalised away, so a pasted in-repo path resolves correctly instead of breaking.

Keybind icons

assets/keybinds/ holds one SVG per key, named after the key itself — F1.svg, TAB.svg, M.svg. A set of defaults ships with the resource.

Icons are only used by the grid, list and compact keybind styles. The default keyboard style draws the physical board and does not use them. When a key has no matching SVG, the key name is displayed as a text chip.


Filenames

Filenames are validated server-side, with path-traversal protection. Stick to plain names and normal extensions. Spaces and accents are fine — the interface encodes them correctly — but a name with #, ? or & is best avoided.