@call-me-sensei/toonlab 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/AGENTS.md +127 -4
  2. package/ATTRIBUTION.md +41 -3
  3. package/README.md +231 -34
  4. package/docs/characters.md +144 -0
  5. package/docs/debug-panel.md +126 -0
  6. package/docs/docs.css +589 -0
  7. package/docs/environment.md +186 -0
  8. package/docs/getting-started.md +180 -0
  9. package/docs/index.html +14 -0
  10. package/docs/lab-architecture.md +100 -0
  11. package/docs/lighting.md +825 -0
  12. package/docs/main.jsx +752 -0
  13. package/docs/mcp.md +97 -0
  14. package/docs/post-processing.md +98 -0
  15. package/docs/settings-reference.md +1878 -0
  16. package/docs/shader-constants.md +77 -0
  17. package/docs/sky.md +182 -0
  18. package/docs/style-labs.md +309 -0
  19. package/docs/texture-lab.md +135 -0
  20. package/docs/toon-shading.md +183 -0
  21. package/docs/tsl-conventions.md +167 -0
  22. package/docs/vegetation-sky.md +275 -0
  23. package/docs/water.md +430 -0
  24. package/docs/weather.md +200 -0
  25. package/docs/world-scale.md +111 -0
  26. package/mcp/server.mjs +610 -0
  27. package/mcp/style-lab-tools.mjs +371 -0
  28. package/mcp/vite-plugin.mjs +174 -0
  29. package/mcp/workspace.mjs +397 -0
  30. package/package.json +64 -5
  31. package/src/ambientfx/INTEGRATION.md +164 -0
  32. package/src/ambientfx/ambientFxPresets.js +83 -0
  33. package/src/ambientfx/ambientFxSettings.js +368 -0
  34. package/src/ambientfx/emitters.js +169 -0
  35. package/src/ambientfx/index.js +5 -0
  36. package/src/ambientfx/particleBackbone.js +493 -0
  37. package/src/ambientfx/stylizedAmbientFx.js +450 -0
  38. package/src/assetlib/ambientcg.js +117 -0
  39. package/src/assetlib/assetRef.js +91 -0
  40. package/src/assetlib/importedEntry.js +40 -0
  41. package/src/assetlib/index.js +23 -0
  42. package/src/assetlib/kaykit.js +192 -0
  43. package/src/assetlib/kaykitStaticIndex.js +700 -0
  44. package/src/assetlib/loadImported.js +143 -0
  45. package/src/assetlib/opensource3d.js +113 -0
  46. package/src/assetlib/polyhaven.js +182 -0
  47. package/src/assetlib/polypizza.js +115 -0
  48. package/src/assetlib/smithsonian.js +214 -0
  49. package/src/assetlib/sources.js +279 -0
  50. package/src/assetlib/zip.js +58 -0
  51. package/src/biome/biomeGenerator.js +385 -0
  52. package/src/biome/biomeRuntime.js +299 -0
  53. package/src/biome/index.js +2 -0
  54. package/src/buildinggen/buildingAsset.js +44 -0
  55. package/src/buildinggen/buildingGrammar.js +311 -0
  56. package/src/buildinggen/buildingMesh.js +451 -0
  57. package/src/buildinggen/buildingPresets.js +46 -0
  58. package/src/buildinggen/buildingRecipe.js +100 -0
  59. package/src/buildinggen/buildingSettings.js +238 -0
  60. package/src/buildinggen/index.js +6 -0
  61. package/src/camera/cameraDirector.js +157 -0
  62. package/src/camera/cameraGenerator.js +367 -0
  63. package/src/camera/cameraRig.js +570 -0
  64. package/src/camera/cameraSettings.js +236 -0
  65. package/src/camera/index.js +7 -0
  66. package/src/catalog/builtinEntries.js +245 -0
  67. package/src/catalog/catalog.js +210 -0
  68. package/src/catalog/index.js +3 -0
  69. package/src/catalog/manifest.js +84 -0
  70. package/src/core/generation.js +529 -0
  71. package/src/environment/environmentRigs.js +21 -1
  72. package/src/environment/environmentSettings.js +4 -0
  73. package/src/environment/environmentSunShadowPass.js +8 -0
  74. package/src/fauna/INTEGRATION.md +174 -0
  75. package/src/fauna/boids.js +861 -0
  76. package/src/fauna/faunaBodies.js +492 -0
  77. package/src/fauna/faunaPresets.js +52 -0
  78. package/src/fauna/faunaSettings.js +525 -0
  79. package/src/fauna/index.js +5 -0
  80. package/src/fauna/stylizedFauna.js +395 -0
  81. package/src/game-feel/gameFeelGenerator.js +402 -0
  82. package/src/game-feel/gameFeelRuntime.js +549 -0
  83. package/src/game-feel/index.js +2 -0
  84. package/src/index.js +17 -6
  85. package/src/lighting/colorIntensity.js +177 -0
  86. package/src/lighting/index.js +161 -0
  87. package/src/lighting/lightDescriptors.js +249 -0
  88. package/src/lighting/lightingCapabilities.js +79 -0
  89. package/src/lighting/lightingDocuments.js +247 -0
  90. package/src/lighting/lightingFixtures.js +446 -0
  91. package/src/lighting/lightingGenerator.js +449 -0
  92. package/src/lighting/lightingPresets.js +319 -0
  93. package/src/lighting/lightingRuntime.js +723 -0
  94. package/src/lighting/lightingStyle.js +386 -0
  95. package/src/lighting/lightingSystem.js +774 -0
  96. package/src/lighting/unrealExport.js +186 -0
  97. package/src/lighting/utils.js +87 -0
  98. package/src/motion/index.js +5 -0
  99. package/src/motion/motionClip.js +441 -0
  100. package/src/motion/motionController.js +628 -0
  101. package/src/motion/motionDocuments.js +225 -0
  102. package/src/motion/motionGraph.js +307 -0
  103. package/src/motion/motionSettings.js +222 -0
  104. package/src/pathgen/index.js +7 -0
  105. package/src/pathgen/pathBridge.js +232 -0
  106. package/src/pathgen/pathPresets.js +35 -0
  107. package/src/pathgen/pathRibbon.js +410 -0
  108. package/src/pathgen/pathRouter.js +380 -0
  109. package/src/pathgen/pathSettings.js +335 -0
  110. package/src/pathgen/pathTextures.js +123 -0
  111. package/src/pathgen/stylizedPaths.js +453 -0
  112. package/src/post/index.js +1 -0
  113. package/src/post/postGenerator.js +177 -0
  114. package/src/post/postProcessing.js +41 -0
  115. package/src/propgen/generatorsWave1.js +379 -0
  116. package/src/propgen/generatorsWave2.js +462 -0
  117. package/src/propgen/index.js +5 -0
  118. package/src/propgen/propAsset.js +323 -0
  119. package/src/propgen/propParts.js +170 -0
  120. package/src/propgen/propPlacement.js +459 -0
  121. package/src/propgen/propPresets.js +82 -0
  122. package/src/propgen/propSettings.js +395 -0
  123. package/src/shaders-tsl/chunks/projected-water-caustics.js +242 -0
  124. package/src/shaders-tsl/chunks/vegetation-style.js +360 -0
  125. package/src/shaders-tsl/chunks/water-shore-state.js +31 -0
  126. package/src/shaders-tsl/chunks/water-waves.js +90 -11
  127. package/src/shaders-tsl/environment.js +15 -1
  128. package/src/shaders-tsl/flower.js +279 -30
  129. package/src/shaders-tsl/grass.js +60 -33
  130. package/src/shaders-tsl/sky.js +125 -31
  131. package/src/shaders-tsl/tree-leaf.js +61 -25
  132. package/src/shaders-tsl/water-breaker.js +7 -4
  133. package/src/shaders-tsl/water-shore-state-simulation.js +523 -0
  134. package/src/shaders-tsl/water.js +439 -49
  135. package/src/shaders-tsl/woody-surface.js +154 -0
  136. package/src/sky/sceneOverrideLayers.js +10 -0
  137. package/src/sky/skyQuality.js +26 -0
  138. package/src/sky/stylizedSky.js +753 -45
  139. package/src/soundscape/index.js +4 -0
  140. package/src/soundscape/soundscapeGenerator.js +179 -0
  141. package/src/soundscape/soundscapeRuntime.js +806 -0
  142. package/src/soundscape/soundscapeSettings.js +292 -0
  143. package/src/styles/index.js +13 -0
  144. package/src/styles/styleBundle.js +325 -0
  145. package/src/stylizedTerrain.js +32 -2
  146. package/src/stylizedWorld.js +423 -20
  147. package/src/texgen/evaluateTexture.js +675 -0
  148. package/src/texgen/index.js +60 -0
  149. package/src/texgen/noise2.js +210 -0
  150. package/src/texgen/textureAi.js +436 -0
  151. package/src/texgen/textureGenerators.js +516 -0
  152. package/src/texgen/texturePresets.js +490 -0
  153. package/src/texgen/textureSettings.js +342 -0
  154. package/src/texgen/textureThree.js +59 -0
  155. package/src/vegetation/flowerSpecies.js +15 -3
  156. package/src/vegetation/grassPalettes.js +153 -0
  157. package/src/vegetation/index.js +6 -0
  158. package/src/vegetation/stylizedBush.js +2 -0
  159. package/src/vegetation/stylizedFlower.js +82 -0
  160. package/src/vegetation/stylizedFlowers.js +48 -7
  161. package/src/vegetation/stylizedForest.js +29 -1
  162. package/src/vegetation/stylizedGrass.js +291 -56
  163. package/src/vegetation/stylizedTree.js +38 -2
  164. package/src/vegetation/stylizedTreeFoliage.js +2 -1
  165. package/src/vegetation/vegetationShaders.js +1110 -0
  166. package/src/vfxgen/INTEGRATION.md +145 -0
  167. package/src/vfxgen/core/burstBackbone.js +380 -0
  168. package/src/vfxgen/core/projectileCore.js +92 -0
  169. package/src/vfxgen/core/spriteShapes.js +98 -0
  170. package/src/vfxgen/core/trailRibbon.js +272 -0
  171. package/src/vfxgen/core/vfxRandom.js +29 -0
  172. package/src/vfxgen/effects/emitHelpers.js +37 -0
  173. package/src/vfxgen/effects/magicEffects.js +162 -0
  174. package/src/vfxgen/effects/movementEffects.js +87 -0
  175. package/src/vfxgen/effects/weaponEffects.js +118 -0
  176. package/src/vfxgen/index.js +18 -0
  177. package/src/vfxgen/moves/moveController.js +146 -0
  178. package/src/vfxgen/moves/moveLibrary.js +335 -0
  179. package/src/vfxgen/vfxPresets.js +98 -0
  180. package/src/vfxgen/vfxSettings.js +384 -0
  181. package/src/vfxgen/vfxSystem.js +449 -0
  182. package/src/vfxgen/weapons/stylizedWeapons.js +137 -0
  183. package/src/villagegen/index.js +4 -0
  184. package/src/villagegen/stylizedVillage.js +490 -0
  185. package/src/villagegen/villageArchetypes.js +160 -0
  186. package/src/villagegen/villageNames.js +40 -0
  187. package/src/villagegen/villageSites.js +105 -0
  188. package/src/water/sceneOverrideLayers.js +23 -0
  189. package/src/water/water.js +5 -0
  190. package/src/water/waterBreakerSystem.js +15 -1
  191. package/src/water/waterCurrentField.js +447 -0
  192. package/src/water/waterMaterial.js +12 -0
  193. package/src/water/waterNearshorePhase.js +320 -0
  194. package/src/water/waterScenePasses.js +83 -30
  195. package/src/water/waterSettings.js +325 -13
  196. package/src/water/waterShoreMaterial.js +322 -0
  197. package/src/water/waterShoreStateField.js +605 -0
  198. package/src/water/waterSurface.js +797 -28
  199. package/src/weather/index.js +6 -0
  200. package/src/weather/weatherPrecipitation.js +221 -0
  201. package/src/weather/weatherPresets.js +258 -0
  202. package/src/weather/weatherSettings.js +269 -0
  203. package/src/weather/weatherSystem.js +871 -0
  204. package/src/worldMinimap.js +62 -0
  205. package/src/worldPresets.js +4 -1
package/AGENTS.md CHANGED
@@ -94,11 +94,134 @@ Every cluster has a `default` and a studio-managed `call_me_sensei` preset.
94
94
 
95
95
  ## Subpath imports
96
96
 
97
- `/toon` `/environment` `/water` `/vegetation` (incl. scatter helpers +
98
- `StylizedForest`) `/sky` `/post` `/character` `/loaders` `/rockgen`
99
- `/debrisgen` `/debug`; root adds `createStylizedTerrain`,
97
+ `/toon` `/environment` `/lighting` `/weather` `/water` `/vegetation` (incl. scatter helpers +
98
+ `StylizedForest`) `/vegetation-shaders` `/grass-palettes` `/sky` `/post` `/character` `/loaders` `/rockgen`
99
+ `/debrisgen` `/pathgen` `/debug`; root adds `createStylizedTerrain`,
100
100
  `createStylizedWorld`, `createWorldCollision`, `createWorldMinimap`,
101
- `resolveWorldPreset`.
101
+ `resolveWorldPreset`, `createStylizedPaths`.
102
+
103
+ Authoring scope: Character/Vegetation/Environment Shader Labs save reusable
104
+ IP-wide material treatments; Tree/Flower/Grass and other Asset Labs save asset
105
+ identity and geometry; Water/Sky Labs save complete runtime-system presets
106
+ with their shader controls embedded, so do not create separate Water Shader or
107
+ Sky Shader documents. Current lighting, weather, camera, and interactions
108
+ remain host-owned.
109
+
110
+ Sky and Water keep authored and current-scene state separate. `.settings` is
111
+ the portable authored baseline; `.renderedSettings` is the composition after
112
+ named transient layers. Lighting, Weather, and other owners must use unique
113
+ ids with `setSceneOverrideLayer`, clear only their own id with
114
+ `clearSceneOverrideLayer`, and never persist the composed result. The manual
115
+ `setSceneOverrides`/`clearSceneOverrides` pair owns only the `scene` layer;
116
+ `clearAllSceneOverrideLayers` is for explicit host teardown.
117
+
118
+ `lighting.attachWorld(world)` owns the world sun adapter plus private
119
+ priority-100 Sky/Water layers. If Weather is present it also installs Lighting
120
+ as Weather's sun/ambient/fog bridge: Lighting remains the sole writer, Weather
121
+ provides modulation and private priority-200 Sky/Water layers, and either
122
+ system removes only its own state on detach/dispose.
123
+ The adapter is `world.setSun({ direction, color, sky })`; it aligns the real
124
+ light/shadows with Grass, Flower, Forest, Ambient FX, Sky, and Water inputs.
125
+ For a standalone custom Weather coordinator, supply paired `getSun`/`setSun`
126
+ and baselines for any write-only cloud/surface adapters so teardown is exact.
127
+
128
+ Sky documents contain exactly 46 portable art fields; constructor-only radius
129
+ and quality are excluded. Sky quality is compile-time (`low`/`medium`/`high`
130
+ = 2/3/4 cloud octaves, or custom `{ cloudOctaves: 1..5 }`), and
131
+ `sky.setQuality()` rebuilds the material while preserving authored/layered
132
+ state. Water quality is selected when constructing `WaterSurface`; a tier
133
+ change requires replacing/rebuilding the surface, never `applySettings()`.
134
+
135
+ Lighting (`/lighting`) owns portable, versioned recipes and looks rather than
136
+ a replacement renderer. Use `createLightingManager({ scene, camera, renderer,
137
+ recipe, quality })`, call `update()` as the focus/camera moves, and save JSON
138
+ with the recipe/look serializers. Luminaire, rig, look, and quality presets
139
+ come from `getLightingPresetOptions(kind)`. Disc/tube area lights, IES, tag
140
+ linking, and Unreal Engine 5.8 MegaLights/Lumen are explicit adapter intent;
141
+ the capability report and diagnostics state each runtime fallback. Author and
142
+ stress-test them in `/lighting-lab/`.
143
+
144
+ `createLightingManager` is the lower-level rig-realization API. For a composed
145
+ world and day cycle, use `createLightingSystem(...)`, then call
146
+ `lighting.attachWorld(world)` for the sun/Sky/Water ownership and Weather
147
+ modulation bridge described above.
148
+
149
+ Paths/roads/bridges: `createStylizedWorld({ paths: { seed, auto: { count: 4,
150
+ styles: ['dirt', 'stone'] } } })` routes seeded trails around slopes, bridges
151
+ water crossings, parts grass/trees around the ribbon, and feeds the flattened
152
+ profile to `world.collision.groundHeight` — use that (not raw `heightAt`) for
153
+ character ground so bridges carry the walk. Minimap: pass `paths: world.paths`
154
+ to `createWorldMinimap` for the network overlay.
155
+
156
+ Catalog (`@call-me-sensei/toonlab/catalog`): the whole procedural library,
157
+ queryable and spawnable —
158
+ `catalog.list({ tags, cluster, text })`, `catalog.get(id)`, and the headline
159
+ `catalog.spawn(id, { seed })` → a PropAsset for any prop / building / tree /
160
+ rock / debris entry (settings presets throw with their copy-paste snippet
161
+ instead). `catalog.register(entry)` adds user assets;
162
+ `catalog.addSource(url, { headers })` mounts remote registries (the pro
163
+ seam). The browser Gallery at `/gallery/` searches third-party open assets;
164
+ the procedural Catalog itself is a runtime API rather than a standalone lab.
165
+
166
+ Villages (`/villagegen`): `createStylizedWorld({ pois: { seed, villages: 2,
167
+ shrines: 1, pierHamlets: 1, size } })` → named settlements (seeded syllable
168
+ names) with streets merged into the world path network, buildings facing
169
+ their street behind picket fences, wells/lanterns/clutter by archetype, POI
170
+ entries auto-connected by roads. `world.pois` feeds
171
+ `createWorldMinimap({ markers })` labels. Fully-shadowed building facades
172
+ need `parameters.sunShadowStrength ≈ 0.7` in worlds that run near-zero
173
+ ambient (full-strength cast shadows crush large vertical masses to black).
174
+
175
+ Fauna (`/fauna`) and ambient VFX (`/ambientfx`) are one option each:
176
+ `createStylizedWorld({ fauna: { species: { birds: 40, fish: 80 } },
177
+ ambientfx: { effects: { petals: true, fireflies: true } } })` — both join
178
+ the world's fog/wind/cloud-shadow automatically.
179
+
180
+ Weather (`/weather`) is a cross-system coordinator, not an environment
181
+ catch-all: `createStylizedWorld({ weather: { preset: 'snow' } })`, then
182
+ `world.setWeather('thunderstorm', { duration: 4 })`. Its 22 shared presets
183
+ drive sky/sun/fog/cloud shadows, wind across vegetation/fauna/ambient FX,
184
+ one-draw GPU rain/snow/sleet/hail/dust, water waves/ripples, lightning and
185
+ thunder events. Surface `{ wetness, snowCover, ice }` values are host-facing
186
+ outputs for custom terrain/prop/character materials. Labs should read
187
+ `getWeatherPresetOptions()` rather than maintaining a private condition list.
188
+
189
+ Gameplay VFX (`/vfxgen`): event-driven combat/movement effects, spawned at
190
+ gameplay moments (not a world option) — `createVfxSystem({ seed, preset,
191
+ heightAt })` then `vfx.spawn('slash' | 'impact' | 'fireball' | 'footstep' |
192
+ 'landing', { at | follow, power, look })` and `vfx.update(delta, camera)`
193
+ per frame. All bursts share TWO draw calls; slash trails / fireball cores
194
+ are pooled meshes. `vfx.setDistanceFog(...)` joins the height-fog layer;
195
+ `vfx.setTimeScale(0)` is hit-stop. Weapons + moves are batteries-included:
196
+ `createStylizedWeapon({ type: 'sword' | 'greatsword' | 'spear' | 'dagger'
197
+ | 'hammer' })` + `createMoveController({ weapon, vfx })` →
198
+ `attack.play('slash' | 'overhead' | 'thrust' | 'spin' | 'plunge')` — authored
199
+ phase-based motions whose event tracks fire the VFX at the right beats
200
+ (plunge = the full crouch→leap→dive→landfall decomposition); weapon weight
201
+ scales timing and hit power. Design interactively in the VFX Lab
202
+ (`/vfx-lab/`): weapon picker + move triggers + schema panels, exports a
203
+ recipe (preset + seed + overrides) that drops straight into `createVfxSystem`.
204
+ The `call_me_sensei` preset targets the reference action-RPG hit language
205
+ (smooth gradient arcs, four-point star + shockwave circle per hit,
206
+ hard-saturated pyro fireball). Demo loop: `examples/vfx-arena/`.
207
+
208
+ Buildings (`/buildinggen`): seeded grammar exteriors —
209
+ `buildingAsset({ type: 'cottage' | 'shed' | 'farmhouse' | 'watchtower' |
210
+ 'shrine', seed })` is a PropAsset (multi-circle footprint, buried foundation
211
+ skirt for slopes ≤ ~20°, hi/lo LOD, `door` anchor with outward normal for
212
+ street-facing placement). `createBuildingFromRecipe(recipe)` rebuilds
213
+ deterministically; ≤ 6 draw calls per building.
214
+
215
+ Props (`/propgen`): every placeable thing is a PropAsset —
216
+ `createPropAsset({ asset: { type: 'lantern', variant: 'stoneToro', seed } })`
217
+ or `propAssetFromObject(importedGlb)` (auto footprint + ground anchor).
218
+ Place with ONE call: `placeAlongSpline({ asset, spline: world.paths.splines[0],
219
+ spacing, offset, mask, heightAt: world.paths.heightAt, collision:
220
+ world.collision, parent })` (fences/walls build continuously; point props
221
+ instance with hi/lo LOD — call the returned `update(delta, camera)` per
222
+ frame), or `scatterProps`/`placeProps`. Props added after `createStylizedWorld`
223
+ need `applyEnvironmentShader(propsRoot, { parameters: { …fog } })` to join the
224
+ look; pass a dry-land `mask` so dressing never marches into water.
102
225
 
103
226
  ## Symptom table — check before debugging blind
104
227
 
package/ATTRIBUTION.md CHANGED
@@ -8,9 +8,18 @@ Code is MIT-licensed by Hyperbond Studio PTE. LTD. (see LICENSE). The assets bun
8
8
  |---|---|---|---|
9
9
  | Mannequin character (45 embedded animation clips) | `public/characters/mannequin.glb` | CC0 1.0 | [Quaternius — Universal Animation Library](https://quaternius.com/packs/universalanimationlibrary.html), recolored to neutral grays. See `public/characters/LICENSE.md`. |
10
10
  | Landscape textures (grassy-land, land, mountain, rock, sand, tree-trunk) | `labs/shared/textures/` | CC0 1.0 | First-party (created by the toonlab authors), dedicated to the public domain. |
11
+ | Water Lab sea fern model | `public/water-lab/cc0/quaternius/fern-1.glb` | CC0 1.0 | [Quaternius — Fern 1, Stylized Nature MegaKit](https://quaternius.itch.io/stylized-nature-megakit), selected through the [ToonLab catalog](https://toonlab.io/asset/quaternius:stylized-nature-megakit-fern-1). |
12
+ | Water Lab Coast Sand 01 texture set | `public/water-lab/cc0/polyhaven/` | CC0 1.0 | [Rob Tuytel — Coast Sand 01, Poly Haven](https://polyhaven.com/a/coast_sand_01), selected through the [ToonLab catalog](https://toonlab.io/asset/polyhaven:coast_sand_01). |
13
+ | City street models (buildings, roads, cars, street props — 28 models) | `public/props/cc0/kaykit-city/` | CC0 1.0 | [Kay Lousberg — KayKit City Builder Bits](https://kaylousberg.com). Attribution optional under CC0; credited with thanks. See the bundled `LICENSE.txt`. |
14
+ | Furniture models (tables, chairs, couch, lamps, shelves — 17 models) | `public/props/cc0/kaykit-furniture/` | CC0 1.0 | [Kay Lousberg — KayKit Furniture Bits](https://kaylousberg.com). Attribution optional under CC0; credited with thanks. See the bundled `LICENSE.txt`. |
15
+ | Environment Lab Wood Floor texture | `public/environments/cc0/polyhaven/wood-floor-diff-1k.jpg` | CC0 1.0 | [Dimitrios Savva — Wood Floor, Poly Haven](https://polyhaven.com/a/wood_floor) |
16
+ | Environment Lab Painted Plaster Wall texture | `public/environments/cc0/polyhaven/painted-plaster-wall-diff-1k.jpg` | CC0 1.0 | [Amal Kumar — Painted Plaster Wall, Poly Haven](https://polyhaven.com/a/painted_plaster_wall) |
17
+ | Environment Lab photoscanned furniture (Sofa 02, Modern Arm Chair 01, Round Wooden Table 01, Classic Console 01, Steel Frame Shelves 01, Potted Plant 04) | `public/environments/cc0/polyhaven/models/` | CC0 1.0 | [Poly Haven models](https://polyhaven.com/models) (1k glTF), per-asset credits on each asset page |
18
+ | Environment Lab museum scans (baluster vase F1980.190-.194; Colonoware pot) | `public/environments/cc0/smithsonian/` | CC0 1.0 | [Smithsonian Open Access 3D](https://3d.si.edu), selected through the [ToonLab catalog](https://toonlab.io/gallery?src=smithsonian) |
19
+ | Draco + Basis decoders (model decompression) | `public/draco/`, `public/basis/` | Apache 2.0 | [google/draco](https://github.com/google/draco), [BinomialLLC/basis_universal](https://github.com/BinomialLLC/basis_universal) — bundled three.js decoder builds |
11
20
 
12
21
  Everything else that renders — water, sky, grass, flowers, trees, foliage,
13
- splashes, post-processing — is procedural code, no asset files.
22
+ splashes, post-processing — is procedural code.
14
23
 
15
24
  ## Not bundled (bring your own)
16
25
 
@@ -32,9 +41,38 @@ folder that is **not** part of this repository:
32
41
 
33
42
  ## Recommended free sources
34
43
 
44
+ The machine-readable version of this list (license facts, integration level,
45
+ quality tier, enable/disable flags) is `src/assetlib/sources.js`; the Asset
46
+ Browser lab surfaces it.
47
+
35
48
  - [Quaternius](https://quaternius.com) — CC0 models + the Universal
36
- Animation Library (v1 and v2 free tiers).
49
+ Animation Library (v1 and v2 free tiers); most of the catalog is
50
+ searchable via Poly Pizza.
37
51
  - [Poly Haven](https://polyhaven.com) — CC0 textures/HDRIs/models.
38
- - [Kenney](https://kenney.nl) — CC0 game assets.
52
+ - [Kenney](https://kenney.nl) — CC0 game assets (no file API; manual import).
53
+ - [KayKit](https://kaylousberg.com) — CC0 stylized low-poly packs (city,
54
+ furniture, dungeon, characters …) on GitHub; integrated in the Asset
55
+ Browser (disabled by default — below the platform quality bar).
56
+ Attribution optional; credited with thanks.
57
+ - [Open Source 3D Assets](https://opensource3dassets.com) — keyless CC0
58
+ registry (Polygonal Mind collections); integrated, pending quality review.
59
+ - [Poly Pizza](https://poly.pizza) — low-poly aggregator, CC0/CC-BY
60
+ (BYO free API key).
61
+ - [Smithsonian 3D Open Access](https://3d.si.edu) — museum scans; only
62
+ records explicitly marked CC0.
63
+ - [Sketchfab CC0 search](https://sketchfab.com/search?features=downloadable&licenses=cc0&type=models)
64
+ — download manually (their download API is per-user OAuth with branding
65
+ terms; deliberately not automated).
66
+ - [The Base Mesh](https://thebasemesh.com) — CC0 base meshes (manual import).
67
+ - [3DTextures.me](https://3dtextures.me) — CC0 stylized materials
68
+ (manual import).
69
+ - [TextureCan](https://www.texturecan.com) — CC0 textures (manual import).
70
+ - [ShareTextures](https://www.sharetextures.com) — CC0 files, but their
71
+ platform terms prohibit automated downloads/hotlinking — browse manually
72
+ only, never wire an adapter.
39
73
  - [OpenGameArt](https://opengameart.org) — filter by CC0/CC-BY.
74
+ - [Openverse](https://openverse.org) — openly licensed images/audio
75
+ (per-record license).
76
+ - [Freesound](https://freesound.org) — sounds; free API tier is
77
+ non-commercial.
40
78
  - [VRoid Hub](https://hub.vroid.com) — VRM avatars (check per-model terms).
package/README.md CHANGED
@@ -4,8 +4,9 @@ ToonLab by Call Me Sensei is a stylized anime-style game starter kit and
4
4
  runtime library for [Three.js](https://threejs.org/). Its goal is to simplify
5
5
  Three.js game development: you get a better-looking anime/stylized game
6
6
  without having to develop shaders yourself, and procedurally generated assets
7
- (trees, rocks, grass, water, sky) reduce content complexity so you can focus
8
- on your core game logic instead. Clone it and a toon-shaded character is
7
+ (trees, rocks, grass) plus integrated procedural world systems (water, sky)
8
+ reduce content complexity so you can focus on your core game logic instead.
9
+ Clone it and a toon-shaded character is
9
10
  walking and swimming through a fully stylized world: cel-shaded characters,
10
11
  painterly environments, interactive water, procedural vegetation and sky,
11
12
  post-processing, and a schema-driven tuning panel. Use it as a starter kit,
@@ -15,8 +16,8 @@ subpath exports per cluster).
15
16
  ## Quickstart
16
17
 
17
18
  **No install** — use the hosted labs at **[toonlab.io](https://toonlab.io)**:
18
- tune character and environment shaders, design trees and rocks, and export
19
- presets straight from the browser.
19
+ define character, vegetation, and environment shaders; author stylized assets;
20
+ tune water and sky systems; and export portable presets from the browser.
20
21
 
21
22
  **As a library** in your own Three.js app:
22
23
 
@@ -35,30 +36,77 @@ npm run dev
35
36
  Vite serves the labs at `http://localhost:5175`. See
36
37
  [Getting started](docs/getting-started.md) for a tour.
37
38
 
39
+ **Building with an AI coding agent?** That is the fastest path through all of
40
+ this — see [Build with an AI coding agent](#build-with-an-ai-coding-agent)
41
+ for the recommended setup (skills + MCP) and ready-to-paste starting prompts.
42
+
43
+ ### Local MCP server
44
+
45
+ Running the labs locally also creates a disk-backed `.toonlab/` workspace
46
+ shared by the browser tools and the included MCP server. Open
47
+ `http://localhost:5175/settings/` for a checkout-specific configuration you
48
+ can paste into an MCP-compatible coding tool.
49
+
50
+ ```bash
51
+ npm run dev
52
+ # In an MCP client, use the command/config shown at /settings/.
53
+ ```
54
+
55
+ The local server can search the built-in procedural catalog and public CC0
56
+ sources, read your saved presets and exported files, generate seeded recipes,
57
+ and import assets into the project. It uses stdio, requires no account or
58
+ OAuth, and keeps work on disk. See [Local MCP and workspace](docs/mcp.md).
59
+
38
60
  ## The labs
39
61
 
40
- Runnable demos in `labs/` (not published to npm). Switch between them with
41
- the HUD Scene select:
42
-
43
- - **Shader Lab** (`/`) character + environment shader tuning: every toon
44
- and environment setting as a live control, preset export/import, debug
45
- views.
46
- - **Playground** (`/playground/`) third-person character controller
47
- in gameplay scenes: calm lake, river crossing, ocean beach with breaking
48
- waves, and an indoor room. Walk, jump, swim, splash.
49
- - **Rock Lab** (`/rock-lab/`) procedural stylized rocks, cliffs,
50
- heightfields, sculpt edits, and GLB export.
51
- - **Tree Lab** (`/tree-lab/`) procedural stylized trees,
52
- flowers, sketches, recipes, and GLB export.
53
- - **Outdoor World** (`/examples/outdoor-world/`) the flagship example: a
54
- seeded 1×1 km open world built entirely from the public library API —
55
- generated terrain, forests, lakes, cliffs, a swimmable character, and a
56
- click-to-travel minimap. Re-roll it from the URL:
57
- `?seed=42&archetype=lakeland&water=0.4&islands=3`.
58
-
59
- Every URL parameter has a HUD control, lab state persists per lab in
60
- `localStorage`, and **Reset Lab** clears it. Point any lab at your own model
61
- with the Model URL input or `?model=` — see
62
+ Lab UIs are development tools and are not published in the npm package. The
63
+ Labs home (`/`) presents them by the artifact they author:
64
+
65
+ - **Shader Labs** — Character Shader Lab (`/shader-lab/`), Vegetation Shader
66
+ Lab (`/vegetation-shader-lab/`), and Environment Shader Lab
67
+ (`/environment-lab/`) each save one reusable IP-wide material treatment.
68
+ - **Asset Labs** — Rock, Tree, Flower, Grass, Debris, and Texture Labs author
69
+ geometry, material data, recipes, and exports for individual asset classes.
70
+ Grass color palettes coordinate base, tip, and shadow tint as one set.
71
+ - **World Systems** — Water Lab (`/water-lab/`) authors waves, surface
72
+ shading, foam, reflections, interaction, and quality as one runtime preset;
73
+ Sky Lab (`/sky-lab/`) authors the gradient, sun, clouds, stars, and cloud
74
+ motion as one runtime preset. Their shader controls are embedded in the
75
+ complete system labs rather than duplicated as separate shader labs.
76
+ - **Playgrounds & demos** Playground, Water Playground, Outdoor World, VFX
77
+ Arena, Fauna Demo, and Ambient VFX Demo validate the authored artifacts in
78
+ interactive scenes.
79
+
80
+ Supporting editors remain available by direct URL: Weather Lab
81
+ (`/weather-lab/`) coordinates current atmosphere, wind, precipitation,
82
+ lightning, and surface state; Lighting Lab (`/lighting-lab/`) authors light
83
+ rigs and budgets; Gallery
84
+ (`/gallery/`) searches supported open-asset sources. The procedural Catalog
85
+ is exposed through `@call-me-sensei/toonlab/catalog`. See
86
+ [Lab responsibilities](docs/lab-architecture.md) for the scope rules and
87
+ [Getting started](docs/getting-started.md) for every direct route.
88
+
89
+ Sky and Water are integrated runtime systems, not extra Shader Labs. Their
90
+ `.settings` are authored preset data; current Lighting and Weather state is
91
+ composed through named transient layers and exposed as `.renderedSettings`
92
+ without changing exported presets. Create a `LightingSystem`, then call
93
+ `lighting.attachWorld(world)` to own the Lighting layers and connect the
94
+ world's Weather coordinator as modulation, so each system can detach only its
95
+ own layer. The shared `world.setSun({ direction, color, sky })` adapter keeps
96
+ the physical light/shadows, vegetation scene inputs, Sky, and Water aligned;
97
+ Weather captures and restores every transient baseline it drives. Sky presets contain exactly 46
98
+ portable art fields; dome radius and compile-time quality stay outside the
99
+ document. Sky provides low/medium/high cloud graphs plus custom 1–5-octave
100
+ quality and can rebuild its material with `setQuality()`. Water quality is a
101
+ construction-time graph choice; switching it requires replacing/rebuilding
102
+ the surface rather than calling `applySettings()`.
103
+
104
+ Every URL parameter has a HUD control. In local development, lab state is
105
+ mirrored into `.toonlab/` so the MCP server and browser share it; existing
106
+ `localStorage` and IndexedDB data migrate on first run. Static hosted builds
107
+ fall back to browser storage. **Reset Lab** clears the current lab state.
108
+ Point any model-aware lab at your own model with the Model URL input or
109
+ `?model=` — see
62
110
  [Characters](docs/characters.md).
63
111
 
64
112
  ## What's inside
@@ -67,14 +115,30 @@ with the Model URL input or `?model=` — see
67
115
  |---|---|---|
68
116
  | Toon character shading | `@call-me-sensei/toonlab/toon` | Modern anime character shader: cel bands with art-directed face lighting, skin-tone shadow management, shadow-color HSV control, scene/self/contact shadows, average-shadow smoothing, rim light (fresnel or screen-space depth), stylized + anisotropic hair highlights, eye catchlights, role-aware specular, source map routing (normal/AO/emissive/MatCap/ramp/detail), inverted-hull outlines, glitter, stickers, perspective removal, shell fur, dither fades — 23 settings groups, all preset-serializable. [Docs](docs/toon-shading.md) |
69
117
  | Environment shading | `@call-me-sensei/toonlab/environment` | Modern anime-style scene shader for texture packs, standard glTF, and untextured scenes: material-role classification, wrapped lighting, packed-map hints, window cutouts, sun/lamp rigs, time-of-day, six-direction ambient probe, planar floor reflections, BVH vertex-AO baking, height fog, cloud shadows. [Docs](docs/environment.md) |
70
- | Water | `@call-me-sensei/toonlab/water` | Fully procedural interactive water: Gerstner wave stack with a calm→storm dial, wave sets, plunging breakers you can surf, three-stop absorption color, refraction/caustics/foam, GPU ripple sim, splashes, wakes, rain, kelp, underwater view with a CPU mirror of the whole spectrum for buoyancy. [Docs](docs/water.md) |
71
- | Vegetation | `@call-me-sensei/toonlab/vegetation` | Instanced grass and flower fields (wind, push-away, scene + cloud shadows, backlit translucency) and procedural stylized trees with a serializable recipe system. [Docs](docs/vegetation-sky.md) |
72
- | Sky | `@call-me-sensei/toonlab/sky` | Procedural gradient/sun/painterly-cloud/star dome that also shows up in water reflections. [Docs](docs/vegetation-sky.md) |
118
+ | Lighting | `@call-me-sensei/toonlab/lighting` | Versioned lighting recipes and looks, physical/artistic intensity helpers, reusable luminaire/rig/look/quality presets, deterministic light and shadow budgets, capability diagnostics, runtime Three.js realization, and a data-only Unreal Engine 5.8 MegaLights/Lumen handoff. [Docs](docs/lighting.md) |
119
+ | Weather | `@call-me-sensei/toonlab/weather` | Shared cross-system weather coordinator with 22 presets, smooth transitions, one-draw GPU precipitation (rain, snow, sleet, hail, dust), lightning/thunder events, and normalized wetness/snow/ice outputs. It drives sky, sun, fog, cloud shadows, wind, vegetation, water, fauna, and ambient effects through their public adapters. [Docs](docs/weather.md) |
120
+ | Water | `@call-me-sensei/toonlab/water` | Fully procedural integrated water system: Gerstner wave stack with a calm→storm dial, wave sets, plunging breakers you can surf, three-stop absorption color, refraction/caustics/foam, GPU ripple sim, splashes, wakes, rain, kelp, underwater view, construction-time quality, and a CPU mirror of the whole spectrum for buoyancy. [Docs](docs/water.md) |
121
+ | Vegetation | `@call-me-sensei/toonlab/vegetation` | Instanced grass and flower fields, procedural trees/flowers with serializable recipes, coordinated grass palettes (base, tip, and shadow tint), and one semantic-role `VegetationShaderProfile` shared across grass, foliage, flowers, bark, and stems. Asset identity and current wind/weather remain separate. [Docs](docs/vegetation-sky.md) |
122
+ | Paths, roads & bridges | `@call-me-sensei/toonlab/pathgen` | Seeded path networks routed over any `heightAt`: cost-field router (slope/water aware), hand-drawn ribbon overlay in dirt/stone/planks, arched plank bridges with collision, stepped stone climbs, flattened `paths.heightAt` for walkability, scatter exclusion mask, minimap overlay. |
123
+ | Asset placement | `@call-me-sensei/toonlab/propgen` | The universal placement pipeline (the PropAsset contract: grounded, collided, instanced, hi/lo LOD by true 3D distance). `propAssetFromObject` drops any imported GLB — e.g. a CC0 model found through MCP — into the pipeline. |
124
+ | Fauna | `@call-me-sensei/toonlab/fauna` | Instanced GPU-animated ambient creatures: flocking birds that perch and flush, butterflies over flower masks, hovering dragonflies, schooling koi — staggered boids, hard population budgets, ≤ 1 ms CPU at defaults. |
125
+ | Ambient VFX | `@call-me-sensei/toonlab/ambientfx` | One GPU particle backbone, five effects: falling petals and leaves, dusk fireflies, backlit pollen, shoreline mist — follow-window emission, shared wind with grass, time-of-day gates, 3 draw calls total. |
126
+ | Asset catalog | `@call-me-sensei/toonlab/catalog` | Every recipe/preset as a searchable manifest with one headline call: `catalog.spawn(id, { seed })` → a placeable PropAsset for trees, rocks, and debris. `catalog.addSource(url)` mounts remote registries. |
127
+ | Sky | `@call-me-sensei/toonlab/sky` | Integrated gradient/sun/painterly-cloud/star system with exactly 46 portable art fields, named live scene layers, compile-time quality tiers/custom 1–5 cloud octaves, meaningful built-in looks, and water-reflection compatibility. [Docs](docs/sky.md) |
73
128
  | Post-processing | `@call-me-sensei/toonlab/post` | Optional single-pipeline compositor: character-aware bloom, color grade, LUT, vignette, screen outline, depth cue — schema-driven, preset-serializable. [Docs](docs/post-processing.md) |
129
+ | Camera | `@call-me-sensei/toonlab/camera` | Extensible camera operator stack, generated recipe/preset documents, follow/framing/collision/damping/noise/impulse behavior, and a director for blending reusable rigs. [Style domain docs](docs/style-labs.md#camera) |
130
+ | Game feel | `@call-me-sensei/toonlab/game-feel` | Event-driven response scheduler for camera punches, hit-stop/time warp, squash, flashes, audio, and haptics through capability-safe adapters, extensible effect factories, and bounded concurrency. [Style domain docs](docs/style-labs.md#game-feel) |
131
+ | Procedural textures | `@call-me-sensei/toonlab/texgen` | Seamless CPU-baked PBR texture generator: 25 tileable pattern/noise generators, layered detail + colored overlays (moss, rust, grime), five-stop cel-capable color ramp, cavity/sheen hand-painted read, derived normal/AO/roughness/metalness/height/ORM/emissive maps, 60+ presets, and a natural-language recipe mapper (offline keywords or BYO-key Gemini/OpenAI). [Docs](docs/texture-lab.md) |
74
132
  | Character pipeline | `@call-me-sensei/toonlab/character` | Bone-role adapters for VRM/MMD/Mixamo/Rigify rigs, native-clip conventions, Mixamo retarget helpers, and a procedural freestyle swim clip. [Docs](docs/characters.md) |
75
133
  | Model loaders | `@call-me-sensei/toonlab/loaders` | Optional GLB/glTF, VRM 0+1, PMX/PMD, FBX, OBJ, and text-USDZ loading helpers. Kept off the root import so apps that do not load models avoid loader dependencies. [Docs](docs/characters.md) |
76
134
  | Debug panel | `@call-me-sensei/toonlab/debug` | One-line schema-driven tuning GUI for any settings module — the same panel the labs use. [Docs](docs/debug-panel.md) |
77
135
 
136
+ The main `vegetation` barrel exposes the complete runtime. Smaller consumers
137
+ can import the same bindings from
138
+ `@call-me-sensei/toonlab/vegetation-shaders` or
139
+ `@call-me-sensei/toonlab/grass-palettes`; package verification asserts that
140
+ the focused subpaths and root export reference the identical implementations.
141
+
78
142
  Zero texture assets in the library: water, sky, grass, flowers, trees, and
79
143
  splashes are all procedural. The one bundled model is a CC0 mannequin with 45
80
144
  embedded animation clips.
@@ -101,6 +165,7 @@ const world = await createStylizedWorld({
101
165
  renderer, scene, camera,
102
166
  terrain: { heightAt: terrain.heightAt, root: terrainRoot, size: terrain.meshExtent },
103
167
  water: { level: terrain.waterLevel },
168
+ weather: { preset: 'call_me_sensei' }, // 'snow' | 'hail' | 'thunderstorm' | ...
104
169
  followTarget: character, // your character root (optional): splashes, wakes, grass push
105
170
  });
106
171
  character.position.copy(terrain.spawn); // probed: walkable, near a shore
@@ -168,13 +233,27 @@ stack, with WebGL2 fallback through the same TSL path.
168
233
 
169
234
  ## Documentation
170
235
 
236
+ - **In-browser docs** — with the labs running (`npm run dev`), open
237
+ `http://localhost:5175/docs/` for guided documentation: library usage,
238
+ MCP setup, the prompt cookbook, and the full settings reference. Hosted
239
+ features are marked "Pro"; the extended hosted docs live at
240
+ [toonlab.io/docs](https://toonlab.io/docs).
241
+ - [Lab responsibilities](docs/lab-architecture.md) — the boundary between
242
+ Shader Labs, Asset Labs, World Systems, and preview-only scene state.
171
243
  - [Getting started](docs/getting-started.md) — clone, run, tour the labs,
172
244
  load your own models.
173
245
  - [Toon character shading](docs/toon-shading.md)
174
246
  - [Environment shading](docs/environment.md)
247
+ - [Lighting](docs/lighting.md)
248
+ - [Weather system](docs/weather.md)
249
+ - [Generative style labs](docs/style-labs.md) — Post & Color, Camera, Motion,
250
+ UI Theme, Biome, Soundscape, and Game Feel; shared recipes, MCP authoring,
251
+ package runtimes, quality budgets, and engine design references.
175
252
  - [Water](docs/water.md)
176
- - [Vegetation and sky](docs/vegetation-sky.md)
253
+ - [Sky system](docs/sky.md)
254
+ - [Vegetation](docs/vegetation-sky.md)
177
255
  - [Post-processing](docs/post-processing.md)
256
+ - [Texture Lab and texgen](docs/texture-lab.md)
178
257
  - [Characters and animation](docs/characters.md)
179
258
  - [Debug panel](docs/debug-panel.md)
180
259
  - [World scale and world presets](docs/world-scale.md) — the meters
@@ -185,11 +264,129 @@ stack, with WebGL2 fallback through the same TSL path.
185
264
  - [Shader constants](docs/shader-constants.md) — the deliberately unexposed
186
265
  constants and where they live.
187
266
 
188
- ## AI coding agents
267
+ ## Build with an AI coding agent
268
+
269
+ ToonLab is designed to be driven by a coding agent (Claude Code, Codex,
270
+ Cursor, …). The recommended setup has three parts: give the agent the ToonLab
271
+ skills, connect an MCP server for asset discovery, then start from a goal
272
+ prompt and iterate. Everything the agent needs ships in this repo under
273
+ `agents/` (not in the npm package — the package stays runtime-only).
274
+
275
+ ### 1. Install the ToonLab skills in your game project
276
+
277
+ The skills teach the agent the assembly order, the frame-loop contract, and
278
+ each subsystem's API so it wires ToonLab correctly on the first try. Start
279
+ with `game-dev`; the other twelve cover individual features (water, weather,
280
+ lighting, camera, game feel, …).
281
+
282
+ ```bash
283
+ # Claude Code — feature skills + project guidance
284
+ mkdir -p .claude/skills
285
+ cp -R path/to/toonlab/agents/skills/claude/* .claude/skills/
286
+ cat path/to/toonlab/agents/codex/AGENTS.md >> CLAUDE.md
287
+
288
+ # Codex — shared guide + Codex-oriented skills
289
+ cat path/to/toonlab/agents/codex/AGENTS.md >> AGENTS.md
290
+ cp -R path/to/toonlab/agents/skills/codex path/to/your-game/docs/toonlab-skills
291
+
292
+ # Cursor — rule file
293
+ mkdir -p .cursor/rules
294
+ cp path/to/toonlab/agents/cursor/toonlab.mdc .cursor/rules/
295
+ ```
296
+
297
+ See [`agents/README.md`](agents/README.md) for the full layout.
298
+
299
+ ### 2. Connect MCP for asset discovery
300
+
301
+ Two servers, and they compose:
302
+
303
+ **Local (free, no account).** The stdio server included in this package
304
+ searches the built-in procedural catalog and public CC0 sources, reads your
305
+ saved presets and lab exports, generates seeded recipes, and imports assets
306
+ into a disk-backed `.toonlab/` workspace:
307
+
308
+ ```json
309
+ {
310
+ "mcpServers": {
311
+ "toonlab-local": {
312
+ "command": "npx",
313
+ "args": ["-y", "@call-me-sensei/toonlab@latest", "--workspace", "/absolute/path/to/your-game/.toonlab"]
314
+ }
315
+ }
316
+ }
317
+ ```
318
+
319
+ If you run the labs from a checkout (`npm run dev`), open
320
+ `http://localhost:5175/settings/` for a ready-made config instead. See
321
+ [Local MCP and workspace](docs/mcp.md).
322
+
323
+ **ToonLab Pro (remote, OAuth).** [toonlab.io](https://toonlab.io) hosts a
324
+ remote MCP server that adds an indexed CC0 asset search with ToonLab-styled
325
+ previews, AI generation (concept art, seamless textures, image→3D model
326
+ chaining) on credits, stored characters with reference-image consistency, and
327
+ your cloud library of presets and style bundles. Requires a Pro or Team plan.
328
+
329
+ ```bash
330
+ # Claude Code
331
+ claude mcp add --transport http toonlab https://toonlab.io/mcp
332
+ ```
333
+
334
+ Other clients: add `https://toonlab.io/mcp` as a remote MCP server and
335
+ authorize in the browser. Full client-by-client setup and a tool reference
336
+ live at [toonlab.io/docs/mcp](https://toonlab.io/docs/mcp).
337
+
338
+ ### 3. The first prompt
339
+
340
+ Give the agent a goal, name the skill, and let it verify its own work:
341
+
342
+ ```text
343
+ Using the ToonLab game-dev skill, set up a new Three.js + Vite project with
344
+ @call-me-sensei/toonlab. Build a 1 km seeded open world (archetype
345
+ "lakeland") with the bundled toon-shaded mannequin as the playable character,
346
+ water, sky, the "call_me_sensei" weather preset, post-processing, and a
347
+ follow camera with game feel. Follow the skill's assembly order and
348
+ frame-loop contract, then run the dev server and fix issues until I can walk
349
+ from spawn to the shoreline and swim.
350
+ ```
351
+
352
+ ### 4. Prompts for common jobs
353
+
354
+ ```text
355
+ Use the ToonLab MCP server to find CC0 props for a small fishing village —
356
+ lanterns, crates, a pier, a torii gate — then place every import with
357
+ propAssetFromObject so they are grounded, collided, and LOD'd. Tell me what
358
+ came from where with licenses.
359
+ ```
360
+
361
+ ```text
362
+ Using the ToonLab water skill, make the ocean stormier as the player sails
363
+ away from shore, and let them surf the plunging breakers near the reef.
364
+ ```
365
+
366
+ ```text
367
+ Generate a seamless mossy stone texture with texgen and apply it to the
368
+ shrine path. I want a hand-painted look with a five-stop cel ramp.
369
+ ```
370
+
371
+ ```text
372
+ Using the ToonLab weather + lighting skills, add a day/night cycle with a
373
+ thunderstorm that rolls in at dusk: wind picks up in the grass, rain streaks
374
+ the water, lightning drives the sky and light rig.
375
+ ```
376
+
377
+ ```text
378
+ Search my ToonLab library for the "sunset-festival" style bundle and apply
379
+ it across toon shading, sky, water, and post so the whole game matches it.
380
+ ```
381
+
382
+ ```text
383
+ Give the sword swing anime game feel: hit-stop, a camera punch, a trail
384
+ ribbon and impact sparks from vfxgen, and a white flash on hit.
385
+ ```
189
386
 
190
- The GitHub repo includes downloadable runtime-usage guidance for Codex, Claude
191
- Code, Cursor, and other coding agents under `agents/`. These files help
192
- developers use ToonLab in their own apps and are not part of the npm package.
387
+ A more extensive prompt cookbook including the Pro generation and
388
+ character-consistency workflows is at
389
+ [toonlab.io/docs/prompts](https://toonlab.io/docs/prompts).
193
390
 
194
391
  ## License
195
392