Skip to content

PatchedReality/Manifolder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

132 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Manifolder (Open Metaverse Map Explorer)

Manifolder is a web-based explorer for hierarchical spatial data structures used in the Open Metaverse and its Spatial Fabric model. It provides interactive 2D and 3D views of map data, allowing developers and content creators to inspect node hierarchies, spatial bounds, and properties.

Manifolder is an open source project created and maintained by Patched Reality, Inc..

The latest version is publicly available at
https://patchedreality.com/manifolder

Related Projects

  • ManifolderClient — JavaScript client library used by Manifolder to connect to Fabric servers
  • ManifolderMCP — MCP server that allows AI agents to browse and edit Fabric scenes

User Interface

Layout Overview

Manifolder uses a three-panel layout:

┌─────────────────────────────────────────────────────────────────┐
│                           Toolbar                               │
├───────────┬─────────────────────────────────┬───────────────────┤
│           │                                 │                   │
│ Hierarchy │           Viewport              │     Inspector     │
│   Panel   │    (Graph / Bounds / Resource)  │       Panel       │
│           │                                 │                   │
├───────────┴─────────────────────────────────┴───────────────────┤
│                          Status Bar                             │
└─────────────────────────────────────────────────────────────────┘

Toolbar

The toolbar provides:

  • URL Input: Enter an MSF (Metaverse Spatial Fabric) file URL to load
  • URL History: Dropdown of recently loaded URLs
  • Load Button: Fetch and parse the specified MSF file
  • Follow Link: Navigate to linked MSF files from a selected node when one exists
  • Add Bookmark (★): Save the current view state (map URL, selected node, expanded nodes)
  • Bookmarks (▼): Access saved bookmarks, rename, or delete them
  • Share (↗): Copy a shareable URL to clipboard that encodes the current state
  • Go To→ (RP1): Navigate to the selected location in the RP1 metaverse client (Earth maps only)
  • Reset View: Clear all saved state and reload the application

URL Parameters

Manifolder supports the following query parameters:

  • ?msf=<url>: Load a specific MSF file on startup. The URL is consumed and removed from the address bar after loading. Example: https://patchedreality.com/manifolder/?msf=https://spatial.example.com/earth.msf
  • ?loc=...: Encoded shared link containing map URL, selected node, expanded nodes, and view state. Generated by the Share button.

Hierarchy Panel (Left)

A tree view displaying the node hierarchy:

  • Search: Filter nodes by name
  • Expand/Collapse: Click toggle arrows or double-click nodes
  • Selection: Click to select and inspect a node
  • Context Menu: Right-click (or long-press on mobile) for options:
    • Expand Level: Expands one level deeper across all expanded branches of the selected node
    • Collapse All: Recursively collapses the selected node and all descendants

Node icons are color-coded by type (celestial bodies, terrestrial regions, etc.).

Viewport Panel (Center)

The viewport supports multiple visualization modes, toggled via buttons. Multiple views can be enabled simultaneously to show side-by-side.

How Selection and Expansion Affect Views

Selection and hierarchy expansion control what's displayed in each view:

  • Selection is synchronized: Selecting a node in any panel (Hierarchy, Graph, or Bounds) updates the selection in all other panels and shows details in the Inspector.

  • Graph View: Displays the entire loaded tree structure. Expanding/collapsing nodes in the hierarchy will update the graph to show more or fewer nodes.

  • Bounds View: Displays 3D spatial bounds for nodes that are expanded in the hierarchy and not filtered out by the Type Filter. Expanding a node in the hierarchy adds its children to the 3D scene.

  • Resource View: Displays 3D models for the selected node and all its expanded descendants. This means expanding more children in the hierarchy will load and display more 3D models in the Resource view.

Common Controls (All Views)

  • Orbit: Click and drag to rotate the camera
  • Zoom: Scroll wheel or pinch gesture
  • Pan: Right-click drag or two-finger drag
  • Select: Click on a node/object to select it
  • Focus: Double-click to zoom to a node

Graph View

A 3D force-directed graph showing node relationships and hierarchy structure.

Bounds View

A 3D visualization using Three.js showing:

  • Spatial bounding volumes (cuboids for terrestrial, spheroids for celestial)
  • Orbital paths for celestial bodies
  • Surface textures when available
  • Labels for node identification

Bounds-specific Controls:

  • Time Scale: Slider to control orbital animation speed (Paused → 1 year/sec)
  • Type Filter: Show/hide specific node types

Resource View

A 3D model viewer for GLB (GLTF Binary) assets associated with nodes:

  • Loads and displays 3D models from node resource references
  • Supports blueprint hierarchies with nested physical objects
  • Automatic LOD (Level of Detail) selection (highest available LOD is used)
  • Models are centered and scaled to fit the viewport
  • Supports video textures via HLS streaming
  • Config-driven rotator animations
  • Point lights and text sprites from blueprint data

Resource-specific Controls:

  • Grid: Adaptive grid that scales based on content size
  • Show Bounds: Toggle bounding volume wireframes for loaded models
  • Time of Day: Slider to adjust sun position for realistic lighting preview (shown for Earth-based nodes)

Inspector Panel (Right)

Shows detailed information about the selected node:

  • Basic Info: Name, type, class, ID
  • Location: Latitude/longitude coordinates (shown for nodes on Earth or other planets with a known radius)
  • Transform: Position, rotation, scale
  • Bounds: Spatial dimensions
  • Raw JSON: Expandable view of the complete node data
  • Resource: Expandable view of linked resource data (if available)

Panel Management

  • Resize: Drag the borders between panels to adjust widths
  • Minimize: Click the button in panel headers to collapse
  • Restore: Click the restore button that appears when minimized
  • Mobile: Horizontal scrolling enabled on narrow screens

Keyboard Shortcuts

  • Ctrl/Cmd + 1: Toggle Graph view
  • Ctrl/Cmd + 2: Toggle Bounds view
  • Ctrl/Cmd + 3: Toggle Resource view

Data Model

Manifolder visualizes data from the Metaverse Spatial Fabric (MSF), a hierarchical spatial data structure organized into three tiers: Celestial, Terrestrial, and Physical objects.

For more complete documentation on the MSF architecture, see the Spatial Fabric Architecture wiki page.

How Manifolder Displays MSF Data

  • Celestial objects: Rendered as spheres with orbital paths in the Bounds view
  • Terrestrial objects: Rendered as bounding boxes representing surface regions
  • Physical objects: Loaded as 3D GLB models in the Resource view
  • Attachment points: Show the "Follow Link" button (see above)

Node icons in the Hierarchy panel are color-coded by type to help identify the object class at a glance. (although the number of object types means some types do overlap in the color space)


3D Rendering Details

Coordinate System

  • Right-handed coordinate system
  • Y-axis up
  • Units in meters (for celestial) or implementation-specific (for terrestrial)

Visual Scaling

For Celestial objects, the Bounds view uses several techniques to make astronomical distances and size differences viewable in a single scene.

This may not be the optimal way to display this information, but it was considered a good First Stab™.

Position Scaling (Logarithmic Compression)

Distances are compressed using a logarithmic scale relative to the focused node's size:

  • 1× focus node distance → ~30 scene units away
  • 10× focus node distance → ~50 scene units away
  • 1000× focus node distance → ~150 scene units away

This keeps nearby objects well-separated while preventing distant objects from being infinitely far away.

Size Scaling (Cube Root Compression)

Object sizes use cube root compression to keep extreme size differences manageable:

  • The focused node always renders at a fixed visual size
  • An object 8× larger renders at 2× visual size
  • An object 1000× larger renders at 10× visual size
  • An object 1/8th the size renders at 0.5× visual size

Culling

Nodes whose bounds exceed 10× the focus node's bounds are hidden entirely—they're considered too large to visualize meaningfully when focused on something much smaller inside them.

Visual Elements

  • Bounding Volumes: Wireframe boxes (terrestrial) or spheres (celestial)
  • Orbit Paths: Elliptical lines showing orbital trajectories
  • Labels: Sprite-based text labels that scale with distance
  • Grid: Infinite grid plane for spatial reference
  • Starfield: Background particle system for context

Animation

Orbital positions are animated based on simulation time:

  • Timescale controllable from paused to 1 year per second
  • Positions calculated using Keplerian orbital mechanics
  • Spin rotation for bodies with axial rotation data

Mobile Support

Manifolder is designed to work on mobile devices (for the most part):

  • Touch Gestures: Pinch to zoom, drag to orbit, tap to select, long press for context menus
  • Responsive Layout: Panels resize for narrower screens with horizontal scrolling

License

Licensed under the Apache License, Version 2.0. See the LICENSE file for details.

Attribution

This project uses the MVMF libraries developed by Metaversal Corporation.

See the NOTICE file for full attribution details.

Contributing

Contributions are welcome. By submitting a pull request, you agree that your contribution will be licensed under the Apache License, Version 2.0.