Most ways of discovering an album still look suspiciously like a list. Cover, title, play button, maybe a waveform if somebody felt adventurous.
I wanted something different for Virya.
An album needed rooms, not another player
The idea behind Synesthesia was to turn listening into a small place you can enter. Not a rhythm game, not a visualiser glued to Spotify and not a collection of music videos with Next buttons. I wanted the player to touch the image, disturb it, reveal it and move through a sequence of rooms where sound, colour, noise and interaction describe the same emotional state.
That became a mobile-first Godot experience running directly in the browser.
The rooms are not conventional levels. Each one borrows a language from a song or release: television static and corrupted screens for Technophobia, Venetian masks for Unmasked, a tree growing out of doubt, ash and a phoenix, broken mirrors, balloons that can be popped, a western duel, an unnervingly elegant dinner and a bedroom that is deliberately quieter and more intimate.
The recurring structure is psychological rather than mechanical. Something is obscured. The player stays with it for a moment. Then the room starts giving something back.
Reveal the song instead of pressing Play
The main interaction became a reveal brush.
A noisy or damaged layer sits over the scene and the player physically wipes through it. The revealed image is not just a percentage counter underneath a finger. The room reacts: visual noise changes, the mix opens, details become readable and the experience gradually moves from interference toward music.
That mechanic gave me a useful design rule: interaction should expose the song, not interrupt it.
Why Godot in the browser?
Godot fit this better than a traditional website. I wanted a scene graph, shaders, audio buses, touch input, transitions, haptics and the option to ship the same project beyond the browser later. The target is a vertical phone screen, but the layout still has to survive real browsers, safe areas, address bars and devices that very much do not care about my 1080×1920 mock-up.
Make the experience stop doing things
The browser also imposes a healthy amount of humility. Audio cannot simply start because a scene loaded. Video decoding is expensive. A beautiful transition that keeps rendering behind a menu is still wasting battery. A decorative Control node can accidentally eat the input intended for the whole room.
A large part of the work therefore became making the experience stop doing things.
Idle video and transition processing sleeps. The animated eye in the menu uses a bounded frame rate instead of trying to prove that blinking needs 120 FPS. Decorative UI ignores pointer events. The menu and room stack have explicit modal boundaries, so a button from the previous scene cannot quietly leak through the next one. Heavy visual assets were converted to import-safe WebP where that made sense, and startup avoids waking every decoder simply because the files exist.
The UI had to belong to the artwork
The visual language needed the same pass. Early UI panels looked like generic game UI floating over much stronger artwork. I rebuilt them around comic-like frames, rougher typography, glitch accents and the same distressed language as the rooms. Door transitions then became more than decoration: moving to the next track should feel like leaving one fragment of consciousness and entering another.
Sound is part of the interaction
Sound is not background decoration either.
Each room has an ambience layer and can move through static, pink-noise-like textures, ringing, environmental sound and the actual music. Visual Snow Syndrome inspired part of the persistent grain and perceptual interference, but I did not want to turn sensory discomfort into a cheap horror effect. The stronger stimuli have to remain bounded, readable and purposeful. Haptics follow the same rule: touch feedback should underline an event, not buzz constantly because a phone is capable of buzzing.
Polish problems are product problems
The hard part has been keeping all those layers coherent.
A room can look right and still feel wrong because the bottom interaction panel is scaled like a desktop window. A transition can be beautiful and still be broken because its overlay survives into the menu. A font can fit the debug skin perfectly and then make normal copy unreadable. A video can loop correctly and still hitch because the loop seam asks the decoder to do too much at once.
Those are not separate polish problems. In an experience like this, they are the product.
One interaction, several senses
I ended up treating Synesthesia less like a game with a soundtrack and more like an instrument panel for perception:
image+ interference+ touch+ motion+ sound+ room state= one interactionIt belongs to the same ecosystem
The completion flow eventually points back toward Virya Signal rather than dropping the player onto a generic “follow us” screen. That matters to me because Synesthesia is not meant to become another isolated campaign microsite. It belongs to the same ecosystem as the music, Signal, AREA and the rest of the fan experience.
The engineering underneath is deliberately less romantic: explicit scene ownership, bounded processing, import-safe assets, adaptive UI, visible failure states and tests for the exact regressions that kept appearing while I was polishing the rooms.
But the thing on top should not feel like architecture.
It should feel like opening a door and finding out that a song has a room behind it.
Current invariants
- eleven rooms
- bounded queue of thirteen active requests
- Replay Mode
- local midtone contrast
The rooms now remember how you played
The missing layer after Replay Mode was a reason for a replay to feel meaningfully different without turning the project into an arcade score attack. Each completed room now receives a local Resonance mastery result — S, A, B or C, backed by a 0–100 score. It rewards exploration, clean interaction and personal-best progress, but deliberately does not punish accessibility or assist settings and does not affect reward eligibility.
The second addition makes Echoes mechanical rather than purely narrative. A remembered Echo from an earlier room now gives a tiny positive carry-over to interaction tolerance and reveal energy in the next room. It cannot unlock content, skip requirements or create a dead end. The effect is intentionally small: enough for the journey to remember the player, not enough to turn one room into a prerequisite for another.
First-load work was tightened at the same time. The next room is no longer prefetched while the current room is still restoring. Prefetch is deferred until the first room is restored and interactive, so initial paint and current-room I/O win the resource race before background work begins.