This page is for a grown-up at a desk. Everything a child needs is in the viewer menus, and the app always starts there.
A handful of small games — an island adventure, a monster truck, falling blocks, space rocks and a racer — built so that neither eye can finish them alone. The two halves of the screen feed one eye each through a Cardboard-style viewer. Set the weaker eye below, then push the stronger eye's contrast down until the games are just barely winnable.
The weaker eye always gets full contrast. Everything below throttles the other one.
Start high (80–100%) for the first session. Lower it until enemies in the stronger eye are faint but still detectable. Too low and the eye stops contributing; too high and it keeps suppressing.
Clear a room without taking a hit → stronger-eye contrast drops one step. Take damage → it comes back up. The game finds your threshold instead of you guessing it.
Two eye views with a wall, your character, one enemy and a key. Hold the viewer up to it and set the sliders until the faint half is faint but not gone.
Nudge until the two images sit on top of each other without effort. Negative pulls them together.
A Bluetooth gamepad is the most comfortable control in a headset: stick or d-pad to move, any face button to swing. Keyboard (WASD / arrows + space) and on-screen thumb zones also work.
Cardboard-style lenses magnify, which bends straight lines outward (pincushion). The fix is to bend the image the other way before it reaches the lens. This runs on the GPU as a barrel warp, per eye, with optional per-channel correction for the colour fringing cheap plastic lenses add at the edges.
Moves the centre of each warp, not the picture. Set this to sit under the middle of your lenses — if it is off, the correction is off-axis and the edges stay bent on one side.
Put the viewer on with the grid up and raise k1 until the lines look straight all the way to the edges, then use k2 to fix whatever is left in the corners. k1 alone usually gets you most of the way. These are a perceptual scale, not a headset’s published coefficients — the grid is the calibration, not the number.
Hold the phone in the viewer and look at the alignment cross on the next screen. You should see one complete cross — a vertical line and a horizontal line crossing inside the ring. If one line is missing, that eye is being suppressed and the settings need adjusting before the dungeon is worth playing.
For a clinic or research group evaluating this. Every run is kept on this phone only — no account, no network, no names. It is game telemetry (contrast over time, segments, hits, alignment answers, per-eye exposure), not a measurement of vision. RESEARCH.md describes every field.
Random unless the study team sets one. Letters, digits and - _ . only — never a name.
The screen blends in gamma-encoded values, so a blend alpha of 40% leaves the stronger eye roughly 67–87% of the full luminance contrast. Luminance makes the setting mean the estimated luminance fraction instead. Both are recorded with every run; neither is a photometric measurement.
Gloamhold is free software under the GNU AGPL v3 (or later): use it, read it, change it, share it. If it helps your family or your work, you can support the time that goes into it. Donations buy nothing inside the game and unlock nothing — every game, colour and island is free for everyone.
Built with generative AI (Claude). Free software, GNU AGPL v3 or later.
Put the viewer on. Each eye is being shown one bar of a cross, plus a ring that both eyes see. Count what you can see.
The cross replaces the whole screen. Answer with the buttons that appear under it, or press 1 / 2 / 3.
Downward is progress: the weaker eye is carrying more of the game. A flat line near the top means the staircase never got a clean room — make the dungeon easier, not the contrast lower.
Everything this run recorded — settings, the contrast trajectory, per-room outcomes, alignment answers and the exact tuning in force. Paste it into a chat and the next round of changes is based on what happened instead of on a hunch.
Every number the engine runs on. Movement, friction and the staircase take effect on the next frame; sizes and hit points apply to enemies spawned from here on, so use Respawn this room to see them.
The whole tuning set as JSON. Copy it to keep a profile that worked, or paste one in and load it.