01 · basics
Start here
Point the laser. Pull the trigger. That's most of Finally.
The vault is your library. Open a folder to dig in. Open a title to play. Everything happens inside VR — you only ever drop to a flat screen when you explicitly ask for the 2D file pickers.
| Input | What it does |
|---|---|
| B | Menu on / off — never exits the app |
| Trigger | Click what you point at · open the quick HUD while playing |
| A | Play / pause |
| Stick ← → | Seek |
One-controller law. Everything critical in Finally works with a single hand. Left-hand buttons are conveniences, never requirements.
02 · muscle memory
Controls
The full map. B is sacred — it only ever toggles the menu.
| Action | Input |
|---|---|
| Menu on/off | B only. Lobby = vault UI; playing = video cockpit |
| Click / confirm | Trigger (when the menu is open) |
| Play / pause | A — or Trigger when the menu is closed |
| Mute | Grip + A |
| Seek | Stick ← → (either hand) |
| Zoom (immersive) | Stick ↕ with the menu closed · range 0.5×–2.6× |
| Flat: distance | Stick ↕ — a physical dolly. Flat video is an object in your room, never a FOV trick |
| Flat: window size | Grip + Stick ← → — shrink / enlarge in place |
| List navigation | Stick ↕ with the menu open |
| Prev / next title | Grip + Stick ↓ / ↑ |
| Drag the world (dome) | Trigger + Grip — grab-the-world |
| Dome dolly (VR180 / fisheye) | Stick ↕ — push forward leans the scene closer. True translation, not optical zoom |
| Full reset | Stick click — zoom 1×, distance home, height and drag zeroed, content on gaze |
| Eye swap | Y (left hand) — also the Eyes cell on PLAY |
| Move the menu panel | Point at it + hold Grip + move your hand |
| Menu pull / push | While grip-holding: Stick ↕ slides it along the ray |
| Resize the menu | While grip-holding: Stick ← → |
Haptics: a hover tick and a click pulse on the pointing hand, with a VIBE toggle on SETUP. Hard rule: grip away from the panel does nothing — no accidental grabs.
Galaxy XR note. Quest binds the full Touch controller profile. Galaxy XR runs the same map through the standard controller profile — laser, trigger, menu, and transport all behave identically.
03 · the lobby
The Club
♡ FINALLY CLUB — your vault, floating in a neon room (or your real one).
The Club is where you land. Titles list in the center; favorites wear a ★; folders glow gold. Aim and trigger to open anything.
The chip row
| Chip | What it does |
|---|---|
| ▲ UP ▼ DN | Scroll the vault |
| ↻ SCAN | Rescan your sources for new files |
| ◎ ROOM | Passthrough — the vault floats in your real room. Saved as your default |
| ✦ WORLD | Cycle the lobby environment — bundled worlds plus your own (see Worlds) |
| ★ FAV | Pin the selected title to favorites |
Setup without leaving VR
⚙ SETUP opens the sources panel in the same room — no screen switch, no splash. It shows every source Finally knows (auto folder + scans + NAS shares).
Only one door leads out of VR: FOLDERS, which intentionally drops to the 2D library for the Android folder and NAS pickers (those dialogs are system UI and can't render in-headset). Everything else keeps you inside.
LEAVE exits to your headset home — labeled LEAVE → QUEST on Quest and LEAVE → HOME on Galaxy XR. On the empty first run the vault says so: "Vault is empty — tap ⚙ SETUP for sources, or drop files in Movies/Finally and ↻ SCAN."
04 · while playing
The Cockpit
Press B during playback: five pages of controls on one floating panel.
PLAY
The transport. Timeline scrubber, -30s / -5s / PLAY / +5s / +30s (the small step is adjustable in SETUP), ■ STOP, ◆ CLUB to return to the lobby, speed, volume, mute, Eyes (L·R ⇄ R·L), the preset AUTO/MANUAL toggle, passthrough, A·B·C·D loop marks, PREV/NEXT, and the quick lens row (VR180 · VR360 · Flat · SBS · OU · AUTO).
A lighter version of this strip — ◀ CLOSER, FARTHER ▶, ◎ ROOM, speed, volume, loops — summons on a bare Trigger pull, so the common moves never need the full panel.
PLACE / EYES
Where the scene sits and how your eyes meet it. Sliders for scene height, move scene (left/right), distance, zoom, depth position (stereo convergence), eye height align, scene tilt, and screen curve (flat titles only — 0 to ~100° of cylindrical wrap, saved per title). Plus flip left/right, flip up/down, Reset place + eyes, and the full manual lens row — see Lenses.
COLOR / KEY
Brightness, contrast, saturation trims with a one-tap reset — and the entire passthrough keying suite: master passthrough toggle, packed-alpha matte, four-color chroma key with per-color edge controls. Detailed in Your room.
SETUP
Seek step size, menu distance and size, theme, menu spawn (at gaze or fixed origin), default-SBS-for-180 toggle, skip intro, resume on/off, stick zoom direction (pull = smaller by default, flippable), wrist-roll dome tilt, haptics — and the lying-down suite: tilt follow rolls the picture with your head so it stays upright to your face instead of the room (lie on your side; the movie comes with you — menus and laser stay world-anchored), and menu level makes the cockpit spawn gravity-level instead of matching your head tilt.
HELP
The in-headset version of this manual: subjects on the left, article on the right, stick ↕ scrolls. It also hides two extra chapters this page only summarizes — THEORY (teal) and DEEPER (green). See Theory.
Nothing decorative. A cockpit toggle must never be a placebo — if a switch is visible, it does something real. That's a design law, not a promise.
05 · the projection brain
Lenses & projection
Filenames hint the shape. Untagged files use the real frame geometry. Your fixes stick per title — forever.
Every VR video is a flat rectangle of pixels that has to be wrapped back into a world. Get the wrap wrong and the scale, depth, and edges all lie to you. Finally reads the filename, checks the frame, picks a projection — and when it can't know, gives you manual overrides that persist.
The lens family
| Lens | FOV | What it is |
|---|---|---|
| VR180 | 180° | Equirectangular half-dome — the standard stitched VR180 format |
| VR360 | 360° | Equirectangular full sphere |
| FISHEYE | 180° | Plain circular fisheye disk — unstitched lens image |
| FE190 | 190° | 190° fisheye — SLR originals and the Canon lens family |
| MKX200 | 200° | SLR MKX lens (plus a RAW variant) |
| MKX220 | 220° | Wider MKX lens |
| VRCA | 220° | VRCA lens correction |
| Flat | — | A 2D panel in your room — optionally curved, never warped |
180 vs 190 — yes, they're different. Same fisheye disk, different lens coverage. A 190° file played on a 180° mesh looks subtly zoomed-in with warped edges; the reverse looks shrunken. When something's off but you can't name it, audition the lens row.
Canon RF 5.2mm dual-fisheye (rf52) exports are treated as stitched VR180 — Canon's EOS VR Utility outputs equirect, so that's where those files belong.
AUTO, MANUAL, and the consent card
Finally's override system exists to kill a disease other players have: silently forgetting your fixes, or silently fighting the filename. The rules:
- AUTO (default): identity is re-derived from the filename and frame every open — detector improvements and renames stay live.
- The first big manual change on a tagged file asks once: OVERRIDE (manual settings for this file) or KEEP AUTO (follow the filename preset).
- Choose OVERRIDE and your settings beat the filename forever — surviving reopens, rescans, and app updates.
- AUTO leads both lens rows as the escape hatch — one tap hands the file back to the detector. Nobody gets trapped in MKX land.
07 · your library
Sources & NAS
Three ways in: the auto folder, any folder you pick, and your NAS over SMB.
The zero-setup path
Drop files into Movies/Finally on the headset and hit ↻ SCAN. Done.
Folders and single files
The 2D library (reached via FOLDERS) adds any folder through the system picker, single files, and sidecar import/export. Clear vault removes library rows only — it never deletes files on disk or NAS.
NAS / PC share (SMB)
Finally treats SMB2/3 as a first-class library source — stream straight off your PC or NAS over Wi-Fi, no copying.
- On your computer, share a folder (Windows: Properties → Sharing).
- Put some videos in that folder.
- Note the PC's IP (e.g.
192.168.1.151) and the share name (e.g.Media) — not the full path. - Headset and PC on the same Wi-Fi / home network.
- Turn off any VPN on the PC if connect fails.
Then: 2D library → + Add NAS share → host, share name, an optional Folder (e.g. media/vr — scans just that subfolder instead of crawling a big share), Windows username + password, port 445. Hit Scan and the vault labels those titles NAS · your-host. Credentials are stored encrypted, on-device, keyed to that share — never in plain preferences, never in any cloud.
Network scans also skip music album art automatically (cover.jpg, folder.jpg, fanart, and any thumbnail-sized still) — a share with a music library won't flood your vault with sleeve scans. Folders you add directly keep every still you pointed at.
Share name, not path. The most common connect failure is typing C:\Media where the share name goes. Use the short name only. Second most common: a VPN on the PC eating local discovery.
What plays
Video: mp4 mkv mov webm avi wmv m2ts ts mpg vob 3gp and friends. Stills: jpg png webp heic avif bmp and friends.
Hardware decode up to 8K where the headset allows. Audio decodes in hardware when possible and falls back to FFmpeg software for AC-3, E-AC-3, and DTS — so MKV rips are not silent. Sidecar notes (*.finally.json) carry projection, prefs, and resume position with the title itself, matched by content hash — your fixes travel with the file, not with an account.
08 · mixed reality
Your room
Passthrough puts the video in your actual space. The keying suite makes it belong there.
Toggle ◎ ROOM in the lobby (persisted as your default) or PASSTHRU while playing. Then, on COLOR / KEY:
Chroma key — up to four colors
◆ MULTI-PICK samples a key color from the frame itself — point the laser at the green screen, pull the trigger. Each of the four color slots gets independent tolerance (tight ↔ wide), edge (sharp ↔ feather), and bleed (none ↔ clean) sliders. A pixel is removed when it matches any enabled color.
Packed alpha
Titles tagged _alpha in the SBS fisheye family carry their own transparency matte packed into the frame corners. The ALPHA cell decodes it directly — with optional override sliders for trim, choke, sharpen ↔ feather, and defringe when the source matte needs cleanup.
Rule of the suite: chroma without a color picker is forbidden. You will never be asked to type an RGB value in VR.
09 · environments
Worlds
The lobby dome is an 8K 360 photo — and it's a drop-in slot.
The ✦ WORLD chip cycles the lobby environment through the bundled worlds plus anything you put in Movies/Finally/environments — any equirect 360 image (jpg / png / webp, up to 8192×4096). Drop a skybox in the folder and it's a world. Your selection persists across sessions.
AI skybox generators, panorama apps, and 360 cameras all output exactly this format — your lobby can be anywhere.
10 · stills
Photos
Same vault, same lenses, same dome — full resolution.
Stills live in the library beside videos and project through the identical lens system: a VR180 photo wraps the half-dome, a flat photo is a panel you can place and curve. The transport row politely dims (◆ PHOTO) since speed and seek mean nothing to a photograph. Camera originals render at full sensor resolution on the dome — up to 8192px wide.
11 · playback
Loops, speed & sound
A–B loops, and then some
Set A, then B — hard loop. Add C and D — cascade: A→B jumps to C, C→D jumps back to A, forever. Seek far past an end marker to escape; Clear wipes the marks; loops reset when you change titles.
Speed
0.25× to 3×, pitch-corrected, from the PLAY page or the quick HUD.
Sound
Volume rides the quick HUD and the PLAY page; Grip+A mutes. Multichannel tracks that the headset can't decode in hardware (AC-3, E-AC-3, DTS) fall back to software so they play anyway. Silent MKV is a bug, not a feature.
12 · skins
Themes
Eight cockpit skins. Two of them are love letters to air traffic control.
| Theme | Character |
|---|---|
| Night | Deep club black, neon accent — the default |
| Club | Warmer, pinker, stage-lit |
| Deo | For the switchers — familiar blues |
| ZNY Center | Mustard-on-black ERAM console |
| N90 TRACON | STARS radar green |
| Ash Airfoil | House colors |
| Boiler Up | Old gold and black |
| Hometown Hero | Varsity royal blue and white |
13 · devices
Quest vs Galaxy XR
| Meta Quest | Samsung Galaxy XR | |
|---|---|---|
| Launch | Straight into the Club (when your vault has titles) | Library first — tap ENTER THE CLUB |
| Passthrough | Meta passthrough layer | System blend-through — same controls, same keying |
| Refresh | Matched to content: 24 fps → 72 Hz, 30 → 90, 60 → 120 | Same matching with a 72 Hz floor (the micro-OLED panel flickers at 60) |
| Exit label | LEAVE → QUEST | LEAVE → HOME |
| Controllers | Touch — full map incl. Y eye-swap | Standard profile — every control still reachable via menu |
One vault, one brain, one manual — the app is the same on both. NTSC rates (23.976 / 29.97 / 59.94) count as their round siblings for refresh matching.
14 · troubleshooting
Fix it
| Symptom | Fix |
|---|---|
| Warped shape | PLAY → AUTO to re-detect — or audition the lens row (a "slightly zoomed" fisheye is usually 180 vs 190) |
| Double vision | PLAY → Eyes · or AUTO |
| Eye strain | PLACE / EYES → depth position and eye height · Reset place + eyes |
| Ends instantly | Resume was at the last frame — the next open starts clean |
| Silent MKV | Shouldn't happen — software decode covers AC-3 / DTS. Check mute and volume, then report it |
| NAS won't connect | Share name not path · same network · VPN off on the PC · check share permissions |
| File won't open | Finally names the reason in plain language — a truncated download is the usual culprit |
Still stuck? coldbricks@gmail.com — reports go to a person, not a queue.
appendix · the teal chapter
Theory of Operation
HELP tells you which button to press. Theory tells you why the picture looks the way it does.
Inside the headset, the HELP page hides two extra chapters: THEORY (teal) and DEEPER (green). They're engineering notes, not marketing — a guided walk from "what is pitch, roll, yaw" all the way down to why the runtime stores your head's orientation as four floats on a 3-sphere. This page keeps the map; the full articles live in the app.
| Subject | The idea |
|---|---|
| Axes | Pitch · roll · yaw — aviation named the triad; your headset reports it every frame |
| 6DoF | You move six ways; a video file captured light from one point. Finally locks the projection to your head and refuses to invent rays that were never recorded — honest 6DoF |
| Vision | Two eyes ~63 mm apart; SBS/OU routes each half-frame to the right one. Swapped eyes = inverted depth = nausea — hence the Eyes control |
| Mapping | Flat panel vs equirect dome vs fisheye disk. When shape looks wrong, the map is wrong — not your eyes |
| Pipeline | Source → detect → decode → project → compose. No cloud hop anywhere in the chain |
| DEEPER | Unit quaternions, coordinate frames, gimbal lock, and the linear algebra your neck already believes |
“A quick word…” — the essay hiding in the THEORY chapter
Somewhere past the pipeline diagrams sits a personal essay: on loving math, on what school did to it, on why SOHCAHTOA was a door and not the house, why JPEG is trigonometry being polite, and why Euler's identity is the reason the dome doesn't jitter when you nod.
It ends like this: "Beauty is not decoration on top of rigor. Beauty is the rigor when you finally see it whole. And please… don't blame SOHCAHTOA for your hatred of math. It was an unfair story. Lol."
— Dave
Read the whole thing in the headset: HELP → THEORY → A word…
15 · the promise
Privacy & about
No account. No cloud. No analytics. Airplane mode is fine.
Your vault, your settings, your NAS credentials — all of it stays on your hardware. The network is used exactly once: to stream from sources you configure, on your network. Full policy: coldbricks.github.io/finally/privacy.
Decode: MediaCodec hardware path with decoder fallback; FFmpeg software audio where hardware can't. Sisters: Finally is built alongside ChloeVibes and ChloeVR in the same shop.
DEVELOPED AND BUILT IN NEW YORK
BY THE PERSON WHO NEEDED A BETTER APP