Wavefunctioncollapse
Javascript port of https://github.com/mxgmn/WaveFunctionCollapse
Install / Use
/learn @kchapelier/WavefunctioncollapseREADME
wavefunctioncollapse
Javascript port of https://github.com/mxgmn/WaveFunctionCollapse
Installing
With npm do:
npm install wavefunctioncollapse --production
Public API
OverlappingModel Constructor
new OverlappingModel(data, dataWidth, dataHeight, N, width, height, periodicInput, periodicOutput, symmetry[, ground])
- data : The RGBA data of the source image.
- dataWidth : The width of the source image.
- dataHeight : The height of the source image.
- N : Size of the patterns.
- width : The width of the generation (in pixels).
- height : The height of the generation (in pixels).
- periodicInput : Whether the source image is to be considered as periodic / as a repeatable texture.
- periodicOutput : Whether the generation should be periodic / a repeatable texture.
- symmetry : Allowed symmetries from 1 (no symmetry) to 8 (all mirrored / rotated variations)
- ground : Id of the specific pattern to use as the bottom of the generation (learn more)
var wfc = require('wavefunctioncollapse');
var imgData = ... // let's pretend this is an ImageData retrieved from a canvas context in the browser
var model = new wfc.OverlappingModel(imgData.data, imgData.width, imgData.height, 3, 48, 48, true, true, 4);
OverlappingModel Methods
model.graphics([array])
Retrieve the RGBA data of the generation.
- array : Array to write the RGBA data into (must already be set to the correct size), if not set a new Uint8Array will be created and returned. It is recommended to use Uint8Array or Uint8ClampedArray.
// create a blank ImageData
var imgData = canvasContext.createImageData(48, 48);
// write the RGBA data directly in the ImageData
model.graphics(imgData.data);
// print the ImageData in the canvas
canvasContext.putImageData(imgData, 0, 0);
SimpleTiledModel Constructor
new SimpleTiledModel(data, subsetName, width, height, periodicOutput)
- data : Tiles, subset and constraints definitions. The proper doc on this matter is yet to be written, check the example in the meantime.
- subsbetName : Name of the subset to use from the data. If falsy, use all tiles.
- width : The width of the generation (in tiles).
- height : The height of the generation (in tiles).
- periodicOutput : Whether the generation should be periodic / a repeatable texture.
var wfc = require('wavefunctioncollapse');
var data = ... // object with tiles, subsets and constraints definitions
var model = new wfc.SimpleTiledModel(data, null, 48, 48, false);
SimpleTiledModel Methods
model.graphics([array[, defaultColor]])
Retrieve the RGBA data of the generation.
- array : Array to write the RGBA data into (must already be set to the correct size), if not set a new Uint8Array will be created and returned. It is recommended to use Uint8Array or Uint8ClampedArray.
- defaultColor : RGBA data of the default color to use on untouched tiles.
// create a blank ImageData
var imgData = canvasContext.createImageData(48, 48);
// write the RGBA data directly in the ImageData, use an opaque blue as the default color
model.graphics(imgData.data, [0, 0, 255, 255]);
// print the ImageData in the canvas
canvasContext.putImageData(imgData, 0, 0);
Common Methods
model.generate([rng])
Execute a complete new generation. Returns whether the generation was successful.
model.generate(Math.random); // return true or false
- rng : A function to use as random number generator, defaults to Math.random.
model.iterate(iterations[, rng])
Execute a fixed number of iterations. Stop when the generation is successful or reaches a contradiction. Returns whether the iterations ran without reaching a contradiction.
- iterations : Maximum number of iterations to execute (0 = infinite).
- rng : A function to use as random number generator, defaults to Math.random.
model.iterate(30, Math.random); // return true or false
model.isGenerationComplete()
Returns whether the previous generation completed successfully.
model.clear()
Clear the internal state to start a new generation.
Changelog
2.1.0 (2021-03-27)
- Port of the latest changes (trivial symmetry support in SimpleTiledModel).
- Update dev dependencies.
2.0.0 (2019-07-06)
- Port of the newer, faster, implementation.
- This port is now written in ES6 instead of ES5 [breaking change].
1.0.0 (2016-10-14)
- Change and freeze the public API (with iteration support).
- First publication on NPM.
License
MIT
Related Skills
node-connect
338.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
338.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.6kCommit, push, and open a PR
