Quickstart
To just try it without installing anything, open demo.oniyanma.jp. What follows are the steps to run it locally.
What you need
- Node.js 22 or later
- pnpm 10 or later
- PDAL if you're preparing your own point cloud (used to convert
.las→.copc.laz)
Run it
git clone https://github.com/oniyanma-jp/oniyanma.git
cd oniyanma
pnpm install
pnpm dev # http://localhost:5173HTTP Range is required
COPC works by fetching only part of the file with byte ranges. It won't display on a server that doesn't support Range. The Vite dev server, vite preview, and pnpm --filter @oniyanma/app serve all support it. Dragging and dropping a local .copc.laz onto the screen also works — no server needed.
To also bring up collaboration and the MCP relay:
pnpm dev:all # app + command relay (ws://8787) + collaboration (ws://8788)Opening data
There's no data loaded on first run. Load it one of these ways:
- Drag and drop — drop a
.copc.lazonto the screen (no server needed) - The "📁 Data" tool rail — "Open file", or enter a URL and press "Load"
- A URL parameter —
http://localhost:5173/?data=https://example.com/foo.copc.laz
If you don't have COPC on hand yet, convert it from .las.
pdal translate input.las packages/app/public/data/site.copc.laz --writer copcFor a 3 GB / 95-million-point .las, this takes about 3 minutes and the output is roughly 500 MB. Details: Loading data.
Walk, and measure
- Open the 🧭 Nav tool rail and switch the mode to Fly
- Left-drag to look,
WASDto move,Space/Ctrlfor up/down,Shiftto speed up - Open the 📏 Measure tool rail, set the type to Distance, and click two points
Readouts are in real-world meters. For polylines and areas, double-click the last point to finish. → Measuring
Select, and clear
- Pick box or lasso in ▚ Select, and drag to enclose a range
- In ✎ Edit, choose "Hide" or "Delete"
Hiding only removes it from view; deleting removes it from deliverables (exports, tallies). Neither changes the .copc.laz, and both can be undone with ⌘Z. → Non-destructive editing
Driving it from the console
Open the browser's developer console and window.oniyanma is available.
oniyanma.commands() // list of available command names
oniyanma.execute('setColorMode', { mode: 'elevation' })
await oniyanma.execute('queryElevation', { bins: 8 })
oniyanma.getState() // a snapshot of the current stateThis goes through the exact same path as a UI button. → window.oniyanma
Instructing the AI
Open ✦ AI, set a provider (Anthropic / OpenAI) and an API key in settings, and you can operate it in natural language.
Color by elevation and look straight down from above
The key is stored only in that device's browser (localStorage) and sent directly to the chosen provider's API. Don't use this on a shared device. → In-app AI console
Verifying
pnpm test # regression tests (app + server, vitest). No GPU or browser needed
pnpm typecheck # type checking only