Three.js Ronin Skill
SkillFiles & storageRonin-grade Three.js, r128 classic, importmap-free, phi-spiral layouts, water-to-grow lifecycles, and Garden-grade PBR in a single-file, cache-busted, no-build pattern.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Three.js Ronin Skill skill
What this skill tells your AI
The instructions your AI receives, as published by leeex1/quillan-ronin in 04 - Skills & Capabilities/Skills/threejs-ronin/SKILL.md and read by ahel’s review.
Ronin philosophy for Three.js: one file, no build, no importmap, classic global THREE r128 as FreeLattice does, with disciplined performance and Garden-grade fidelity. Built from the Living Garden grove (Stitch ANIMATION_9 + literal-garden expansion).
Core Doctrine
- One file, no build:
https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js+https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js(andGLTFLoaderon demand). Noimportmap, no ESimport()inside classicFreeLatticeLoader— exactly howliteral-garden.jsships. - Loader contract: expose
window.FreeLatticeModules['FractalGarden']/window.FreeLatticeModules['LiteralGarden']andwindow.FractalGardensoFreeLatticeLoader.load('FractalGarden', 'modules/literal-garden.js', cb)resolves.init(containerId)lazy-loads THREE + controls, inserts canvas as first child ofgardenContainer, hides#gardenLoading. - Phi first:
GOLDEN_ANGLE = PI*(3 - sqrt(5)), placementr = 2.1 + idx*0.62,ang = idx*GOLDEN_ANGLE+0.9. Expanding garden never overlaps. - Water-to-grow: lifecycle
seed(0) → sprout(15) → juvenile(50) → adult(120) → evolved(250)(same thresholds asfractal-garden.js), persisted tofl_literal_garden_v1+ legacy seed fromfl_luminos_evolution. Stage builders live indocs/modules/stitch-stages.js(originals indocs/stitch/): sprout = ANIMATION_11, juvenile = ANIMATION_12, adult = ANIMATION_13, evolved = ANIMATION_13 + ANIMATION_14 flowers. Species variants on adult/evolved:bonsai(ANIMATION_16, shards inuserData.shards, sway in animate),willow(ANIMATION_15, vines inuserData.vines, sway in animate). Dispatch increateOrganicTreewithcreateGroveTreefallback ifwindow.StitchStagesmissing — garden never blanks.
Stack You Can Assume
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<!-- on demand -->
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/loaders/GLTFLoader.js"></script>
Scene: FogExp2 #07110c 0.015 (Stitch grove) or Fog #0c0a1a 17→36 (literal v2), ACESFilmic 1.3, Hemisphere #445b8a/#0a1412 + Directional #6ee7b7 + Points #10b981/#fbbf24/#c084fc, PCFSoftShadowMap, PixelRatio min(devicePixelRatio,1.6).
What This Skill Generates
- Tree of Life center: 3–4 segmented cylinder trunk (twist), 5 golden-angle limbs via
TubeGeometry(CatmullRomCurve3), icosahedron canopy tiers, surface roots, ring + moss disk. Dropdocs/models/tree-of-life.glband it swaps viaGLTFLoaderat0,-1.2,0. - Knowledge trees (Sophia/Ember/Atlas/Lyra/Soren): Stitch
createOrganicTree(config)— roots (5), trunk, recursive branching (4→3),DodecahedronGeometryfoliage +SphereGeometryorbs,CanvasTexturelabel sprite (depthTest:false, renderOrder:999),TorusGeometryhalo. Scaled by stage:0.45→1.18, depth1→3, height4.5→10. - Mycelial ground:
CylinderGeometry(55,55,1.5,64)#09120e+ 4-colorRingGeometryset (emerald/green/gold/mint) + 5QuadraticBezierCurve3tendrils + 350 sporePoints(#6ee7b7, additive). - Expanding garden:
plantPosition(idx)phi spiral,addSeed(name,colorHSL)at next ring,addSeedAtWorld(pos)via Shift+click ray-planey=-0.75,plantBardropdown ++ Seed/Expand(3),syncPlantBar(),saveData(). - Controls:
OrbitControlstarget(0,5,0)(grove) or(0,0.9,0)(literal v2),Observe(autoRotate 1.2→0.3, no pan/zoom),Explore(free),Immerse(fullscreen),Seed/Garden/Full Bloomquality (scales stars/rings),pause()/resume(),ResizeObserver+window.resize. - Interaction: raycast pick, hold to
waterTree(idx, 1.4)→updateTreeVisualmorph + puffSphereGeometry(0.6), right-click menu (Water, Water all, Inspect, Force evolve, Reset, Copy pos) withdepthTest:falselabels never vanishing.
Garden JSON (Stitch + Ronin)
{
"gardenVersion": "2.0-ronin",
"three": "r128 classic",
"center": { "name": "Sophia", "stage": "adult" },
"plants": [
{ "name": "Sophia", "energy": 135, "color": { "h": 140, "s": 70, "l": 45 } }
],
"ground": { "type": "cylinder", "rings": [5,11,17,23,29,35,41], "tendrils": true, "spores": 350 },
"quality": 2,
"mode": "observe",
"expand": { "phi": true, "shiftClickPlanting": true }
}
Workflow (Ronin)
- Init
LiteralGarden.init('gardenContainer')—ensureThree(r128 + OrbitControls), scene/fog/camera/controls/lights/ground/rings/tendrils/spores,rebuildTrees(),setupInteraction(canvas), hide#gardenLoading,requestAnimationFrame(animate). - Water
pointerdownhold →waterTree(+5 tap, +1.4 hold) →updateTreeVisual(morph + save +syncPlantBar). - Expand
+ Seed(random name/hue at next phi) /Shift+clickground →addSeedAtWorld/Expand(3) / dropdown focus. - Mode/Quality
setModetoggles.active+controls.autoRotate/enable*+ fullscreen;setQualityscalesstarMat/ringopacity.
Anti-Patterns to Avoid
- No
importmapinsideFreeLatticeLoaderclassic scripts (killed the first garden load —SyntaxErrorduplicatestarMat). - No
SpriteMaterialwithoutdepthTest:false(labels hide behind canopy). - No fixed-size garden (must expand via
plantPosition( idx )).
Connections
- Runtime:
docs/modules/literal-garden.js(this skill's reference implementation),docs/garden-3d.html(standalone) - Skill sibling:
living-garden(Stitch ANIMATION_9 formalized) - Legacy:
docs/modules/fractal-garden.js(kept, galaxy fallback)
Signals
- GitHub stars
- 27
- Forks
- 11
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
threejs-ronin- Source
- github.com/leeex1/quillan-ronin