Six ship classes, deterministic seeds, S/M/L tiers, fleets, GLB export with UVs. Runs in your browser. CC0 outputs, MIT code.
GamesJavaScript · CSSGitHub @exoticspicesOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Seeded low-poly spaceship generator in the browser. Six classes, liveries, fleet view. Export game-ready GLB, CC0.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Seeded, game-ready low-poly spaceships, generated in your browser.
Type a seed, pick a class, get a ship. The same seed always rebuilds the same ship, and you can export it as a .glb (or a whole fleet as a .zip) and drop it straight into Blender, Unity, Godot or Roblox. Everything you generate is CC0: use it for anything, no attribution needed.
Try it: https://exoticspices.github.io/shipyard/ · Source: https://github.com/exoticspices/shipyard
kestrel-4821, -4822, ...) parked in a tidy dock lineup. Click any ship to open it..glb for the focused ship, a fleet .zip with all nine GLBs, PNG screenshots, copy link.&ui=0 to the hash (or ?shot to the URL) to hide all UI and stop the auto-spin. Useful for screenshots and thumbnails.Keys: Space new ship · 1–6 class · T tier · L livery · V view · F fleet · R spin.
| # | Class | Look | Signature (S / M / L) |
|---|---|---|---|
| 1 | Fighter | dart fuselage, canopy, swept/delta/forward/cranked/X wings | engines 1 / 2 / 3 (+ 0 / 2 / 4 missiles) |
| 2 | Hauler | spine with clamped containers/tanks, aft command tower | containers abreast 1 / 2 / 3 × slots |
| 3 | Surveyor | slim hull haloed by a sensor ring | rings 1 / 1 / 2 · sensor nodes |
| 4 | Miner | segmented boxy hull, intake maw with grinders, crane | hull segments 2 / 3 / 4 |
| 5 | Corvette | layered slab hull, command island, turret batteries | turrets 2 / 4 / 6 (+ sponsons) |
| 6 | Racer | cockpit hull with dorsal spine, engine nacelles in an arrowhead, catamaran or bundle layout, tied together by a swept wing | hulls 3 / 5 / 7 |
Every GLB is in meters, Y-up, nose toward +Z (glTF forward) and centered on the origin. Each material channel gets one mesh and one material: primary, structure, accent, accent2, glass, windows, engineGlow. That makes recoloring or retexturing a single slot easy. Normals are flat (faceted look) and UVs are box-projected at 1 UV unit = 1 m, so a tiling trim/panel texture works without unwrapping. Exhaust plumes and the hover bob exist only in the viewer and are never exported.
com.unity.cloud.gltfast), or import through Blender to FBX. One unit is one meter. glTF +Z forward maps onto Unity's +Z forward..glb into the project and it imports natively. Set windows and engineGlow to Unshaded or give them emission so they glow.max N/mesh) if you push the detail slider on large tiers.Each class is a small hull grammar: a handful of rules that place parts relative to each other rather than at fixed coordinates.
seed + class, so a seed keeps its family look (wing type, nose, layout, fins) at every tier. The detail stream also includes the tier, so plating and greebles vary per size.width, height, chamfers, offset at each station). Noses, tails and humps come from changing those sections.hull.top(z) puts a canopy on the surface, hull.at(z) sizes a collar. That keeps parts attached when proportions change. A dev check flags any part whose bounds don't touch the rest of the ship.A ship builds in a few milliseconds. Large ships are roughly 3k–15k triangles.
It's a static site with no build step. Serve the folder over HTTP (ES modules don't load from file://):
npx http-server shipyard -p 8123 -c-1
# or
python -m http.server 8123 --directory shipyard
Then open http://127.0.0.1:8123/. three.js loads from jsDelivr via an import map.
Dev tooling lives in _dev/ (npm install there first; uses puppeteer-core with your installed Chrome):
node --import ./register.mjs gen-test.mjs: determinism, NaN, triangle-budget and floating-part checks across many seeds.node glb-check.mjs, node zip-check.mjs: validate exported GLBs and fleet zips from the running app.node shoot.mjs name=hash[@WxH] ...: headless screenshots. node og.mjs regenerates og.png.node perf.mjs, node leak.mjs: frame timing and GPU/heap leak checks.