Releases: xAstroBoy/Quest-Home-Editor
Release list
v0.10.22
Quest Home Editor v0.10.21
Quest Home Editor v0.10.21
Large-scene scaling + cook/packaging reliability (#22)
A broad reliability pass across loading, cooking, packaging and builds — aimed at the real failure modes of very large legacy Quest Homes (there is no artificial mesh-count limit):
- Lower peak RAM on big OPA scenes: compatible immutable base-color texture payloads are now reused across split/export chunks (edited, cropped, blended, aux-map, lightmap and VAT textures are never shared).
- Hardened ZIP/APK processing: traversal/Zip-Slip guards, duplicate/unsafe-name rejection, declared-size bomb limits, classic-ZIP overflow checks — and every miniz write/splice operation is now checked, so a cook can no longer silently produce a truncated package.
- Deterministic cook preflight: geometry/index validation with bounded, actionable diagnostics before the expensive encode starts.
- Emissive-only V79 material conversion fix.
- Optional "VrShell 206 fallback" cook toggle (OFF by default): only for headsets where a recent Quest update makes a no-root haven2025 spoof open NUXD/default Home — mirrors the content through the canonical Haven static-architecture template.
- Path-independent build helpers (vswhere-based Windows build), regression tests, and reliability/scaling docs (
docs/RELIABILITY_AND_SCALING.md).
New: Clear VrShell app data (one click)
Cook panel → "Clear VrShell app data (reset home state)": runs pm clear com.oculus.vrshell on the connected headset and relaunches the home factory-fresh. Use it when the home is stuck on stale/corrupted state after env experiments. Tries no-root first, falls back to su on rooted headsets. Installed env APKs are untouched (a rooted headset must re-select its env afterwards — re-cook or Install only does it).
Windows x64 — Quest-Home-Editor-windows-x64.zip (exe + fonts) or the bare exe. adb is embedded (extracted beside the app on first use) if you don't have platform-tools installed.
Quest Home Editor v0.10.20
Quest Home Editor v0.10.20
Coherent multi-mesh backdrop fitting (#19)
Distant skylines made of several meshes used to be scaled one-by-one, which tore their layout apart (buildings drifting relative to each other). Marking meshes as a backdrop now creates a fit group: every mesh in the group is scaled by one shared factor around the real player spawn, so the whole composition keeps its shape while fitting inside the Quest shell's 5000 m far clip.
- Right-click → "Fit as coherent backdrop" (or the mesh-panel checkbox). Each marking action on a multi-selection makes one group; separate groups fit independently.
- A fit radius field (default 3000 m, clamped below your configured far clip and the 5000 m device plane) appears when a fitted mesh is selected.
- Fitting resolves from the actual player spawn (your spawn item → navmesh → scene bounds) — never the free editor camera, so orbiting the camera no longer changes the cook.
- Fitted backdrops are visual-only: excluded from auto colliders, navmeshes, playable bounds, and the player simulator. Animated / skinned / non-static groups are rejected and fall back to the normal cook path.
- Old sessions load fine: legacy
SKYBOXmarks migrate to one coherent fit group automatically; the.geomsidecar bumps to v3 to remember groups on editor-created meshes. - Fog is never silently changed — the cook warns if your current fog would hide most of a fitted backdrop.
Thanks @nikitat21 for the contribution!
Quest Home Editor v0.10.19
Quest Home Editor v0.10.19
Whale-eyes / static-part repair (right-click)
Some models leave vertices with no skin weight (steam_void's whale has 242 unweighted verts = its 2 eye spheres). Unweighted verts freeze at the bind pose while the skeleton animates the body — so they look like static black spheres.
Right-click a skinned mesh → "Bind N loose verts to skeleton (fix static parts)" (the item appears only when a mesh has loose verts). Each unweighted vertex copies the skin of its nearest already-weighted vertex, so the eyes ride the head surface — rigid, seamless, no tearing. Nothing is automatic; leaving verts as-authored stays the default.
Headlight / unlit toggle
Press L in the viewport to cycle OFF → UNLIT → OVERBRIGHT — forces every mesh flat-bright so dark/black meshes reveal their base texture (tell eyes from delete-me artifacts). Also HSR_FULLBRIGHT headless.
Quest Home Editor v0.10.18
Quest Home Editor v0.10.18
Fix: animated sub-mesh drifts "out of place" after cook
A rigid mesh that rides a parent's motion and adds its own faster spin (e.g. steam_void's mesh0.001/mesh0.002: a 4.1s spin under mesh0's 29s orbit) is an irrational-beat multi-period chain. When no small common loop exists, the cook fell back to the global animation length (an unrelated mesh's duration), which loops out of phase with the parent — so the sub-mesh slowly drifts off the orbit while its siblings stay put.
Fix: on an irrational beat, loop at the longest chain period (the parent's dominant motion) so the macro-motion stays clean and children remain locked to their parent/siblings; only the fast sub-spin takes a tiny, near-invisible seam snap. Verified on-device: steam_void's mesh0.001/.002 now cook identically to their siblings (29.03s) and stay on the orbit. HSR_MPMASTER restores the old behavior.
Quest Home Editor v0.10.17
Quest Home Editor v0.10.17
Fix: cook REJECTED (falls back to nuxd) on older Quest OS
Follow-up to v0.10.16. Cooks were still rejected on the Oct-2023 Quest OS (Quest 3 UP1A.231005) — the env fell back to nuxd instead of loading.
Root cause (libshell, IDA-confirmed): the cook emitted boundsCenter/boundsHalfSize of MeshPartBoundsOverride as a 3-field {x,y,z}, but the field is a Vec4. Newer OS parsers leniently accepted the short form (defaulting w=0); the older OS parser is strict and emits Core: Expected:'Vec4', Found:'{x,y,z}', which aborts the content.hstf template JSON load (ErrorMissingData) and rejects the whole env.
Fix: emit both as full Vec4 ("w":0) — passes the strict parser on old and new OS (kept version:0 from v0.10.16). Verified on-device: re-cooked steam_void now installs, selects, and loads on the Oct-2023 Quest 3 (previously rejected → nuxd).
New: "Anti-cull bounds" cook toggle
Cook panel → "Anti-cull bounds (animated meshes stay visible)" (persisted). Leave ON normally; turn it OFF to drop MeshPartBoundsOverride entirely if any headset still chokes on it, so the env always loads.
If a past cook was rejected or black on an older headset, re-cook it with this build.
Quest Home Editor v0.10.16
Quest Home Editor v0.10.16
Fix: pure-black scene on older Quest OS
Cooked environments rendered pure black on pre-v206 Horizon OS (e.g. a Quest 3 on the Oct-2023 UP1A.231005 build), even though the same env works on newer OS.
Root cause (traced in libshell via IDA): the cook stamped horizon::renderer::MeshPartBoundsOverride at version 1 on every mesh entity (the fix that stops animated meshes from being frustum-culled), but older Horizon OS registers that class at version 0. libshell's version translator only migrates old→new, so version 1 on a version-0 device failed to copy boundsHalfSize and aborted component generation on every mesh → nothing rendered.
Fix: emit MeshPartBoundsOverride at version 0. The fields are identical across versions, so it loads exactly on older devices and up-translates cleanly on v206 — no culling regression. If you cooked an env that showed black on an older headset, re-cook it with this build and it will render.
Quest Home Editor v0.10.15
Quest Home Editor v0.10.15
Animation
- Far-from-origin spinners fixed (synthwave, steam_void, japan fans, shark_reef). A mesh whose rotation loops a sub-360° segment (e.g. 120° over 1.667s repeated ~20× inside a 33s clip on a 3-fold-symmetric mesh) baked as a sawtooth, so the device NLERP'd each internal reset as a fast backward flick. The cook now re-accumulates it as one continuous spin (
SPIN-UNWRAP), keeps each interpolation step small on fast spins (SPIN-DENSIFY), and a scale-independent mirror guard skips negative-scale rotoinversions (outerwilds planets) that previously blew a clip up to 146k frames. Verified across all 81 envs — fires only on genuine spinners, no regressions. Opt-outs:HSR_NOSPINUNWRAP,HSR_NOSPINDENSIFY.
Import / cook
- GLB import: dropped/opened
.glb/.gltffiles with embedded textures or non-zero UV sets no longer render black — the importer externalizes embedded images and foldsTEXCOORD_NintoTEXCOORD_0. - Smart floor: every static mesh gets an automatic walkable mesh-collider when the env has no user navmesh; navmeshes also cook as mesh-colliders so you don't fall through.
Diagnostics
- Version + PC specs (OS / CPU / RAM / GPU) now print at the top of
Quest Home Editor.log, appear in the window title, and are prepended to every logcat / diagnostic export — so shared logs and bug reports always say which build produced them and on what hardware.
Credits
- GLB → APK import adapted from VirtualVoltage/Quest-home-GLBtoAPK.
Quest Home Editor v0.10.14
Vista neutralize is now a manual button only
By request: the vista killer no longer runs automatically. It used to fire after every cook+install and when a Quest connected — now it only runs when you press "Neutralize vistas now", since it destructively replaces the real Meta vistas with empty ones and that should always be your explicit choice.
- Removed the auto-neutralize on cook and the auto-fix-on-connect, plus their toggles.
- Kept the single "Neutralize vistas now" button.
- Default cook is still combined (no vista paired at all), so most homes never need the button.
Linux/macOS: build from source (bash QuestHomeEditor/build_linux.sh).
Quest Home Editor v0.10.13
Fixes the tool removing vistas on ROOTED headsets.
Never touches your vistas on a rooted Quest
On a rooted headset your home installs under its own package and is selected directly — there's no footprint/vista pairing involved, so the real Meta vistas are irrelevant to it. The vista-neutralize was running anyway and replacing your real vistas with empty ones, deleting them for no reason.
Now the neutralize is gated to unrooted installs only:
- On rooted, it's skipped entirely ("vistas: LEFT UNTOUCHED").
- The auto-fix-on-connect also bails on a rooted device.
- The cook toggle is relabeled "Nullify vistas (UNROOTED spoof only – replaces real vistas)" so it's clear what it does and when.
If your vistas were already removed: they're store apps — reinstall them from the Meta Store to get them back.
Linux/macOS: build from source (bash QuestHomeEditor/build_linux.sh).