{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "title": "ModuleGroup schema",
    "description": "Specifies a group of libnoise and Wangscape modules with output and possible inputs.",
    "properties": {
        "defaultoutputmodule": {
            "type": "string",
            "title": "ModuleGroup defaultoutputmodule schema",
            "description": "Specifies which of the keys in 'modules' contains the module which should be used for the module group's output."
        },
        "inputmodules": {
            "type": "array",
            "title": "ModuleGroup inputmodules schema",
            "description": "Specifies which of the keys in Modules, if any, contain modules which should be used to relay the module group's external input modules.",
            "items": {
                "type": "string",
                "title": "Specifies a key in Modules which contains a module that should be used to relay one of the module group's external input modules. The module referred to must be of a type with at least one source module, and only the first will be used."
            }
        },
        "modules": {
            "type": "object",
            "title": "ModuleGroup modules schema",
            "description": "Specifies the names, types, and attributes of a group of libnoise and Wangscape modules.",
            "additionalProperties": {
                "oneOf": [
                    {
                        "$ref": "#/definitions/abs"
                    },
                    {
                        "$ref": "#/definitions/add"
                    },
                    {
                        "$ref": "#/definitions/billow"
                    },
                    {
                        "$ref": "#/definitions/bitmap"
                    },
                    {
                        "$ref": "#/definitions/blend"
                    },
                    {
                        "$ref": "#/definitions/cache"
                    },
                    {
                        "$ref": "#/definitions/checkerboard"
                    },
                    {
                        "$ref": "#/definitions/clamp"
                    },
                    {
                        "$ref": "#/definitions/const"
                    },
                    {
                        "$ref": "#/definitions/corner_combiner_base"
                    },
                    {
                        "$ref": "#/definitions/curve"
                    },
                    {
                        "$ref": "#/definitions/cylinders"
                    },
                    {
                        "$ref": "#/definitions/displace"
                    },
                    {
                        "$ref": "#/definitions/divide"
                    },
                    {
                        "$ref": "#/definitions/exponent"
                    },
                    {
                        "$ref": "#/definitions/exp"
                    },
                    {
                        "$ref": "#/definitions/forward"
                    },
                    {
                        "$ref": "#/definitions/gradient_x"
                    },
                    {
                        "$ref": "#/definitions/gradient_y"
                    },
                    {
                        "$ref": "#/definitions/gradient_z"
                    },
                    {
                        "$ref": "#/definitions/invert"
                    },
                    {
                        "$ref": "#/definitions/logarithm"
                    },
                    {
                        "$ref": "#/definitions/max"
                    },
                    {
                        "$ref": "#/definitions/min"
                    },
                    {
                        "$ref": "#/definitions/multiply"
                    },
                    {
                        "$ref": "#/definitions/norm_lp_q"
                    },
                    {
                        "$ref": "#/definitions/perlin"
                    },
                    {
                        "$ref": "#/definitions/power"
                    },
                    {
                        "$ref": "#/definitions/pow"
                    },
                    {
                        "$ref": "#/definitions/quadrant_selector"
                    },
                    {
                        "$ref": "#/definitions/reciprocal"
                    },
                    {
                        "$ref": "#/definitions/ridged_multi"
                    },
                    {
                        "$ref": "#/definitions/rotate_point"
                    },
                    {
                        "$ref": "#/definitions/scale_bias"
                    },
                    {
                        "$ref": "#/definitions/scale_point"
                    },
                    {
                        "$ref": "#/definitions/select"
                    },
                    {
                        "$ref": "#/definitions/spheres"
                    },
                    {
                        "$ref": "#/definitions/terrace"
                    },
                    {
                        "$ref": "#/definitions/translate_point"
                    },
                    {
                        "$ref": "#/definitions/turbulence"
                    },
                    {
                        "$ref": "#/definitions/voronoi"
                    }
                ]
            }
        }
    },
    "required": [
        "defaultoutputmodule",
        "modules"
    ],
    "definitions": {
        "source_module_1": {
            "oneOf": [
                {
                    "type": "string",
                    "title": "Module SourceModule schema",
                    "description": "Specifies which of the keys in this module group contains the module that should be used as this module's source module."
                },
                {
                    "type": "array",
                    "title": "Module SourceModules schema",
                    "description": "Specifies an array of keys in this module group which contain the modules that should be used as this module's source modules.",
                    "minLength": 1,
                    "maxLength": 1,
                    "items": {
                        "type": "string",
                        "title": "Module SourceModules item schema",
                        "description": "Specifies a key in this module group which contains a module that should be used as one of this module's source modules."
                    }
                }
            ]
        },
        "source_module_2": {
            "type": "array",
            "title": "Module SourceModules schema",
            "description": "Specifies an array of keys in this module group which contain the modules that should be used as this module's source modules.",
            "minLength": 2,
            "maxLength": 2,
            "items": {
                "type": "string",
                "title": "Module SourceModules item schema",
                "description": "Specifies a key in this module group which contains a module that should be used as one of this module's source modules."
            }
        },
        "noise_quality": {
            "oneOf": [
                {
                    "type": "string",
                    "enum": [
                        "Fast",
                        "Standard",
                        "Best"
                    ]
                },
                {
                    "type": "number",
                    "enum": [
                        0,
                        1,
                        2
                    ]
                }
            ]
        },
        "comment": {
            "type": "string",
            "title": "Module comment schema",
            "description": "Specifies a comment in a module for documentation purposes."
        },
        "abs": {
            "type": "object",
            "title": "Abs module schema",
            "description": "Specifies an Abs module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Abs.",
                    "pattern": "^Abs$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "add": {
            "type": "object",
            "title": "Add module schema",
            "description": "Specifies an Add module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Add.",
                    "pattern": "^Add$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_2"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "billow": {
            "type": "object",
            "title": "Billow module schema",
            "description": "Specifies a Billow module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Billow.",
                    "pattern": "^Billow$"
                },
                "Frequency": {
                    "type": "number",
                    "title": "Billow module Frequency schema",
                    "description": "Specifies the value of Frequency used in this Billow module."
                },
                "Lacunarity": {
                    "type": "number",
                    "title": "Billow module Lacunarity schema",
                    "description": "Specifies the value of Lacunarity used in this Billow module."
                },
                "Persistence": {
                    "type": "number",
                    "title": "Billow module Persistence schema",
                    "description": "Specifies the value of Persistence used in this Billow module."
                },
                "OctaveCount": {
                    "type": "number",
                    "title": "Billow module OctaveCount schema",
                    "description": "Specifies the value of OctaveCount used in this Billow module.",
                    "multipleOf": 1,
                    "minValue": 1
                },
                "NoiseQuality": {
                    "$ref": "#/definitions/noise_quality"
                },
                "Seed": {
                    "type": "number",
                    "title": "Billow module Seed schema",
                    "description": "Specifies the value of Seed used in this Billow module.",
                    "multipleOf": 1
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "bitmap": {
            "type": "object",
            "title": "Bitmap module schema",
            "description": "Specifies a Bitmap module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Bitmap.",
                    "pattern": "^Bitmap$"
                },
                "Filename": {
                    "type": "string",
                    "title": "Bitmap module Filename schema",
                    "description": "Specifies the filename of the image used in this Bitmap module."
                },
                "MaxScale": {
                    "type": "boolean",
                    "title": "Bitmap module MaxScale schema",
                    "description": "Specifies the value of MaxScale used in this Bitmap module."
                },
                "Region": {
                    "type": "array",
                    "title": "Bitmap module Region schema",
                    "description": "Specifies the rectangular region of noise coordinates where the image data will be used. The first pair of coordinates is the top left, and the second pair is the size.",
                    "minItems": 2,
                    "maxItems": 2,
                    "items": {
                        "type": "array",
                        "minItems": 2,
                        "maxItems": 2,
                        "items": {
                            "type": "number"
                        }
                    }
                },
                "DefaultValue": {
                    "type": "number",
                    "title": "Bitmap module DefaultValue schema",
                    "description": "Specifies the value returned by the Bitmap module when the requested coordinates are outside the image region"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "Filename"
            ]
        },
        "blend": {
            "type": "object",
            "title": "Blend module schema",
            "description": "Specifies a Blend module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Blend.",
                    "pattern": "^Blend$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_2"
                },
                "ControlModule": {
                    "type": "string",
                    "title": "Blend Module ControlModule schema",
                    "description": "Specifies which of the keys in this module group contains the module that should be used as this module's control module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule",
                "ControlModule"
            ]
        },
        "cache": {
            "type": "object",
            "title": "Cache module schema",
            "description": "Specifies a Cache module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Cache.",
                    "pattern": "^Cache$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "checkerboard": {
            "type": "object",
            "title": "Checkerboard module schema",
            "description": "Specifies a Checkerboard module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Checkerboard.",
                    "pattern": "^Checkerboard$"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "clamp": {
            "type": "object",
            "title": "Clamp module schema",
            "description": "Specifies a Clamp module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Clamp.",
                    "pattern": "^Clamp$"
                },
                "Bounds": {
                    "type": "array",
                    "title": "Clamp module Bounds schema",
                    "description": "Specifies the value of Bounds used in this Clamp module.",
                    "minItems": 2,
                    "maxItems": 2,
                    "items": {
                        "type": "number"
                    }
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "const": {
            "type": "object",
            "title": "Const module schema",
            "description": "Specifies a Const module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Const.",
                    "pattern": "^Const$"
                },
                "ConstValue": {
                    "type": "number",
                    "title": "Const module ConstValue schema",
                    "description": "Specifies the value of ConstValue used in this Const module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "corner_combiner_base": {
            "type": "object",
            "title": "CornerCombinerBase module schema",
            "description": "Specifies a CornerCombinerBase module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type CornerCombinerBase.",
                    "pattern": "^CornerCombinerBase$"
                },
                "Power": {
                    "type": "number",
                    "title": "CornerCombinerBase module Power schema",
                    "description": "Specifies the value of Power used in this CornerCombinerBase module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "curve": {
            "type": "object",
            "title": "Curve module schema",
            "description": "Specifies a Curve module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Curve.",
                    "pattern": "^Curve$"
                },
                "ControlPoints": {
                    "type": "array",
                    "title": "Curve module ControlPoints schema",
                    "description": "Specifies the value of ControlPoints used in this Curve module.",
                    "minItems": 4,
                    "_uniqueItems": true,
                    "items": {
                        "type": "array",
                        "title": "Curve Module ControlPoint schema",
                        "description": "Specifies one of the ControlPoints used in this Curve Module.",
                        "minItems": 2,
                        "maxItems": 2,
                        "items": {
                            "type": "number"
                        }
                    }
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "cylinders": {
            "type": "object",
            "title": "Cylinders module schema",
            "description": "Specifies a Cylinders module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Cylinders.",
                    "pattern": "^Cylinders$"
                },
                "Frequency": {
                    "type": "number",
                    "title": "Cylinders module Frequency schema",
                    "description": "Specifies the value of Frequency used in this Cylinders module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "displace": {
            "type": "object",
            "title": "Displace module schema",
            "description": "Specifies a Displace module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Displace.",
                    "pattern": "^Displace$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "DisplaceModules": {
                    "type": "array",
                    "title": "Module DisplaceModules schema",
                    "description": "Specifies an array of keys in this module group which contain the modules that should be used as this module's displacement modules.",
                    "minLength": 3,
                    "maxLength": 3,
                    "items": {
                        "type": "string",
                        "title": "Module DisplaceModules item schema",
                        "description": "Specifies a key in this module group which contains a module that should be used as one of this module's displacement modules."
                    }
                },
                "XDisplaceModule": {
                    "type": "string",
                    "title": "Module XDisplaceModule schema",
                    "description": "Specifies which of the keys in this module group contains the module that should be used as this module's X displacement module."
                },
                "YDisplaceModule": {
                    "type": "string",
                    "title": "Module YDisplaceModule schema",
                    "description": "Specifies which of the keys in this module group contains the module that should be used as this module's Y displacement module."
                },
                "ZDisplaceModule": {
                    "type": "string",
                    "title": "Module ZDisplaceModule schema",
                    "description": "Specifies which of the keys in this module group contains the module that should be used as this module's Z displacement module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "allOf": [
                {
                    "required": [
                        "type",
                        "SourceModule"
                    ]
                },
                {
                    "anyOf": [
                        {
                            "not": {
                                "required": [
                                    "DisplaceModules"
                                ]
                            }
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XDisplaceModule"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YDisplaceModule"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZDisplaceModule"
                                        ]
                                    }
                                }
                            ]
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XDisplaceModule"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YDisplaceModule"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZDisplaceModule"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "DisplaceModules"
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "divide": {
            "type": "object",
            "title": "Divide module schema",
            "description": "Specifies a Divide module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Divide.",
                    "pattern": "^Divide$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_2"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "exponent": {
            "type": "object",
            "title": "Exponent module schema",
            "description": "Specifies an Exponent module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Exponent.",
                    "pattern": "^Exponent$"
                },
                "Exponent": {
                    "type": "number",
                    "title": "Exponent module Exponent schema",
                    "description": "Specifies the value of Exponent used in this Exponent module."
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "exp": {
            "type": "object",
            "title": "Exp module schema",
            "description": "Specifies an Exp module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Exp.",
                    "pattern": "^Exp$"
                },
                "Base": {
                    "type": "number",
                    "title": "Exp module Base schema",
                    "description": "Specifies the value of Base used in this Exp module."
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "forward": {
            "type": "object",
            "title": "Forward module schema",
            "description": "Specifies a Forward module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Forward. Forward modules are intended to have source modules external to the module group, so the SourceModule field is optional.",
                    "pattern": "^Forward$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "gradient_x": {
            "type": "object",
            "title": "GradientX module schema",
            "description": "Specifies a GradientX module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type GradientX.",
                    "pattern": "^GradientX$"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "gradient_y": {
            "type": "object",
            "title": "GradientY module schema",
            "description": "Specifies a GradientY module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type GradientY.",
                    "pattern": "^GradientY$"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "gradient_z": {
            "type": "object",
            "title": "GradientZ module schema",
            "description": "Specifies a GradientZ module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type GradientZ.",
                    "pattern": "^GradientZ$"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "invert": {
            "type": "object",
            "title": "Invert module schema",
            "description": "Specifies an Invert module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Invert.",
                    "pattern": "^Invert$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "logarithm": {
            "type": "object",
            "title": "Logarithm module schema",
            "description": "Specifies a Logarithm module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Logarithm.",
                    "pattern": "^Logarithm$"
                },
                "Base": {
                    "type": "number",
                    "title": "Logarithm module Base schema",
                    "description": "Specifies the value of Base used in this Logarithm module."
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "max": {
            "type": "object",
            "title": "Max module schema",
            "description": "Specifies a Max module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Max.",
                    "pattern": "^Max$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_2"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "min": {
            "type": "object",
            "title": "Min module schema",
            "description": "Specifies a Min module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Min.",
                    "pattern": "^Min$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "multiply": {
            "type": "object",
            "title": "Multiply module schema",
            "description": "Specifies a Multiply module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Multiply.",
                    "pattern": "^Multiply$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_2"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "norm_lp_q": {
            "type": "object",
            "title": "NormLPQ module schema",
            "description": "Specifies a NormLPQ module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type NormLPQ.",
                    "pattern": "^NormLPQ$"
                },
                "P": {
                    "type": "number",
                    "title": "NormLPQ module P schema",
                    "description": "Specifies the value of P used in this NormLPQ module."
                },
                "Q": {
                    "type": "number",
                    "title": "NormLPQ module Q schema",
                    "description": "Specifies the value of Q used in this NormLPQ module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "perlin": {
            "type": "object",
            "title": "Perlin module schema",
            "description": "Specifies a Perlin module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Perlin.",
                    "pattern": "^Perlin$"
                },
                "Frequency": {
                    "type": "number",
                    "title": "Perlin module Frequency schema",
                    "description": "Specifies the value of Frequency used in this Perlin module."
                },
                "Lacunarity": {
                    "type": "number",
                    "title": "Perlin module Lacunarity schema",
                    "description": "Specifies the value of Lacunarity used in this Perlin module."
                },
                "Persistence": {
                    "type": "number",
                    "title": "Perlin module Persistence schema",
                    "description": "Specifies the value of Persistence used in this Perlin module."
                },
                "OctaveCount": {
                    "type": "number",
                    "title": "Perlin module OctaveCount schema",
                    "description": "Specifies the value of OctaveCount used in this Perlin module.",
                    "multipleOf": 1,
                    "minValue": 1
                },
                "NoiseQuality": {
                    "$ref": "#/definitions/noise_quality"
                },
                "Seed": {
                    "type": "number",
                    "title": "Perlin module Seed schema",
                    "description": "Specifies the value of Seed used in this Perlin module.",
                    "multipleOf": 1
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "power": {
            "type": "object",
            "title": "Power module schema",
            "description": "Specifies a Power module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Power.",
                    "pattern": "^Power$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_2"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "pow": {
            "type": "object",
            "title": "Pow module schema",
            "description": "Specifies a Pow module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Pow.",
                    "pattern": "^Pow$"
                },
                "Exponent": {
                    "type": "number",
                    "title": "Pow module Exponent schema",
                    "description": "Specifies the value of Exponent used in this Pow module."
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "quadrant_selector": {
            "type": "object",
            "title": "QuadrantSelector module schema",
            "description": "Specifies a QuadrantSelector module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type QuadrantSelector.",
                    "pattern": "^QuadrantSelector$"
                },
                "Translate": {
                    "type": "array",
                    "title": "QuadrantSelector module Translate schema",
                    "description": "Specifies the value of Translate used in this QuadrantSelector module.",
                    "minItems": 3,
                    "maxItems": 3,
                    "items": {
                        "type": "boolean"
                    }
                },
                "XTranslate": {
                    "type": "boolean",
                    "title": "QuadrantSelector module XTranslate schema",
                    "description": "Specifies the value of XTranslate used in this QuadrantSelector module."
                },
                "YTranslate": {
                    "type": "boolean",
                    "title": "QuadrantSelector module YTranslate schema",
                    "description": "Specifies the value of YTranslate used in this QuadrantSelector module."
                },
                "ZTranslate": {
                    "type": "boolean",
                    "title": "QuadrantSelector module ZTranslate schema",
                    "description": "Specifies the value of ZTranslate used in this QuadrantSelector module."
                },
                "TranslateIgnored": {
                    "type": "array",
                    "title": "QuadrantSelector module TranslateIgnored schema",
                    "description": "Specifies the value of TranslateIgnored used in this QuadrantSelector module.",
                    "minItems": 3,
                    "maxItems": 3,
                    "items": {
                        "type": "boolean"
                    }
                },
                "XTranslateIgnored": {
                    "type": "boolean",
                    "title": "QuadrantSelector module XTranslateIgnored schema",
                    "description": "Specifies the value of XTranslateIgnored used in this QuadrantSelector module."
                },
                "YTranslateIgnored": {
                    "type": "boolean",
                    "title": "QuadrantSelector module YTranslateIgnored schema",
                    "description": "Specifies the value of YTranslateIgnored used in this QuadrantSelector module."
                },
                "ZTranslateIgnored": {
                    "type": "boolean",
                    "title": "QuadrantSelector module ZTranslateIgnored schema",
                    "description": "Specifies the value of ZTranslateIgnored used in this QuadrantSelector module."
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "allOf": [
                {
                    "required": [
                        "type",
                        "SourceModule"
                    ]
                },
                {
                    "anyOf": [
                        {
                            "not": {
                                "required": [
                                    "Translate"
                                ]
                            }
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XTranslate"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YTranslate"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZTranslate"
                                        ]
                                    }
                                }
                            ]
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XTranslate"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YTranslate"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZTranslate"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "Translate"
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                },
                {
                    "anyOf": [
                        {
                            "not": {
                                "required": [
                                    "TranslateIgnored"
                                ]
                            }
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XTranslateIgnored"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YTranslateIgnored"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZTranslateIgnored"
                                        ]
                                    }
                                }
                            ]
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XTranslateIgnored"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YTranslateIgnored"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZTranslateIgnored"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "TranslateIgnored"
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "reciprocal": {
            "type": "object",
            "title": "Reciprocal module schema",
            "description": "Specifies a Reciprocal module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Reciprocal.",
                    "pattern": "^Reciprocal$"
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "ridged_multi": {
            "type": "object",
            "title": "RidgedMulti module schema",
            "description": "Specifies a RidgedMulti module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type RidgedMulti.",
                    "pattern": "^RidgedMulti$"
                },
                "Frequency": {
                    "type": "number",
                    "title": "RidgedMulti module Frequency schema",
                    "description": "Specifies the value of Frequency used in this RidgedMulti module."
                },
                "Lacunarity": {
                    "type": "number",
                    "title": "RidgedMulti module Lacunarity schema",
                    "description": "Specifies the value of Lacunarity used in this RidgedMulti module."
                },
                "OctaveCount": {
                    "type": "number",
                    "title": "RidgedMulti module OctaveCount schema",
                    "description": "Specifies the value of OctaveCount used in this RidgedMulti module.",
                    "multipleOf": 1,
                    "minValue": 1
                },
                "NoiseQuality": {
                    "$ref": "#/definitions/noise_quality"
                },
                "Seed": {
                    "type": "number",
                    "title": "RidgedMulti module Seed schema",
                    "description": "Specifies the value of Seed used in this RidgedMulti module.",
                    "multipleOf": 1
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "rotate_point": {
            "type": "object",
            "title": "RotatePoint module schema",
            "description": "Specifies a RotatePoint module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type RotatePoint.",
                    "pattern": "^RotatePoint$"
                },
                "XAngle": {
                    "type": "number",
                    "title": "RotatePoint module XAngle schema",
                    "description": "Specifies the value of XAngle used in this RotatePoint module."
                },
                "YAngle": {
                    "type": "number",
                    "title": "RotatePoint module YAngle schema",
                    "description": "Specifies the value of YAngle used in this RotatePoint module."
                },
                "ZAngle": {
                    "type": "number",
                    "title": "RotatePoint module ZAngle schema",
                    "description": "Specifies the value of ZAngle used in this RotatePoint module."
                },
                "Angles": {
                    "type": "array",
                    "title": "RotatePoint module Angles schema",
                    "description": "Specifies the values of XAngle, YAngle, and ZAngle used in this RotatePoint module.",
                    "minLength": 3,
                    "maxLength": 3,
                    "items": {
                        "type": "number"
                    }
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "allOf": [
                {
                    "required": [
                        "type",
                        "SourceModule"
                    ]
                },
                {
                    "anyOf": [
                        {
                            "not": {
                                "required": [
                                    "Angles"
                                ]
                            }
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XAngle"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YAngle"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZAngle"
                                        ]
                                    }
                                }
                            ]
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XAngle"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YAngle"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZAngle"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "Angles"
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "scale_bias": {
            "type": "object",
            "title": "ScaleBias module schema",
            "description": "Specifies a ScaleBias module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type ScaleBias.",
                    "pattern": "^ScaleBias$"
                },
                "Scale": {
                    "type": "number",
                    "title": "ScaleBias module Scale schema",
                    "description": "Specifies the value of Scale used in this ScaleBias module."
                },
                "Bias": {
                    "type": "number",
                    "title": "ScaleBias module Bias schema",
                    "description": "Specifies the value of Bias used in this ScaleBias module."
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "scale_point": {
            "type": "object",
            "title": "ScalePoint module schema",
            "description": "Specifies a ScalePoint module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type ScalePoint.",
                    "pattern": "^ScalePoint$"
                },
                "XScale": {
                    "type": "number",
                    "title": "ScalePoint module XScale schema",
                    "description": "Specifies the value of XScale used in this ScalePoint module."
                },
                "YScale": {
                    "type": "number",
                    "title": "ScalePoint module YScale schema",
                    "description": "Specifies the value of YScale used in this ScalePoint module."
                },
                "ZScale": {
                    "type": "number",
                    "title": "ScalePoint module ZScale schema",
                    "description": "Specifies the value of ZScale used in this ScalePoint module."
                },
                "Scale": {
                    "oneOf": [
                        {
                            "type": "array",
                            "title": "ScalePoint module Scale schema",
                            "description": "Specifies the values of XScale, YScale, and ZScale used in this ScalePoint module.",
                            "minLength": 3,
                            "maxLength": 3,
                            "items": {
                                "type": "number"
                            }
                        },
                        {
                            "type": "number",
                            "title": "ScalePoint modulel Scale schema",
                            "description": "Specifies the single value used in this ScalePoint module for XScale, YScale, and ZScale."
                        }
                    ]
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "allOf": [
                {
                    "required": [
                        "type",
                        "SourceModule"
                    ]
                },
                {
                    "anyOf": [
                        {
                            "not": {
                                "required": [
                                    "Scale"
                                ]
                            }
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XScale"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YScale"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZScale"
                                        ]
                                    }
                                }
                            ]
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XScale"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YScale"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZScale"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "Scale"
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "select": {
            "type": "object",
            "title": "Select module schema",
            "description": "Specifies a Select module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Select.",
                    "pattern": "^Select$"
                },
                "Bounds": {
                    "type": "array",
                    "title": "Select module Bounds schema",
                    "description": "Specifies the value of Bounds used in this Select module.",
                    "minLength": 2,
                    "maxLength": 2,
                    "items": {
                        "type": "number"
                    }
                },
                "EdgeFalloff": {
                    "type": "number",
                    "title": "Select module EdgeFalloff schema",
                    "description": "Specifies the value of EdgeFalloff used in this Select module."
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_2"
                },
                "ControlModule": {
                    "type": "string",
                    "title": "Blend Module ControlModule schema",
                    "description": "Specifies which of the keys in this module group contains the module that should be used as this module's control module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule",
                "ControlModule"
            ]
        },
        "spheres": {
            "type": "object",
            "title": "Spheres module schema",
            "description": "Specifies a Spheres module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Spheres.",
                    "pattern": "^Spheres$"
                },
                "Frequency": {
                    "type": "number",
                    "title": "Spheres module Frequency schema",
                    "description": "Specifies the value of Frequency used in this Spheres module."
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        },
        "terrace": {
            "type": "object",
            "title": "Terrace module schema",
            "description": "Specifies a Terrace module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Terrace.",
                    "pattern": "^Terrace$"
                },
                "InvertTerraces": {
                    "type": "boolean",
                    "title": "Terrace module InvertTerraces schema",
                    "description": "Specifies the value of InvertTerraces used in this Terrace module."
                },
                "ControlPoints": {
                    "type": "array",
                    "title": "Terrace module ControlPoints schema",
                    "description": "Specifies the value of ControlPoints used in this Terrace module.",
                    "minLength": 2,
                    "items": {
                        "type": "number"
                    }
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "translate_point": {
            "type": "object",
            "title": "TranslatePoint module schema",
            "description": "Specifies a TranslatePoint module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type TranslatePoint.",
                    "pattern": "^TranslatePoint$"
                },
                "XTranslation": {
                    "type": "number",
                    "title": "TranslatePoint module XTranslation schema",
                    "description": "Specifies the value of XTranslation used in this TranslatePoint module."
                },
                "YTranslation": {
                    "type": "number",
                    "title": "TranslatePoint module YTranslation schema",
                    "description": "Specifies the value of YTranslation used in this TranslatePoint module."
                },
                "ZTranslation": {
                    "type": "number",
                    "title": "TranslatePoint module ZTranslation schema",
                    "description": "Specifies the value of ZTranslation used in this TranslatePoint module."
                },
                "Translation": {
                    "oneOf": [
                        {
                            "type": "array",
                            "title": "TranslatePoint module Translation schema",
                            "description": "Specifies the values of XTranslation, YTranslation, and ZTranslation used in this TranslatePoint module.",
                            "minLength": 3,
                            "maxLength": 3,
                            "items": {
                                "type": "number"
                            }
                        },
                        {
                            "type": "number",
                            "title": "TranslatePoint modulel Translation schema",
                            "description": "Specifies the single value used in this TranslatePoint module for XTranslation, YTranslation, and ZTranslation."
                        }
                    ]
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "allOf": [
                {
                    "required": [
                        "type",
                        "SourceModule"
                    ]
                },
                {
                    "anyOf": [
                        {
                            "not": {
                                "required": [
                                    "Translation"
                                ]
                            }
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XTranslation"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YTranslation"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZTranslation"
                                        ]
                                    }
                                }
                            ]
                        },
                        {
                            "allOf": [
                                {
                                    "not": {
                                        "required": [
                                            "XTranslation"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "YTranslation"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "ZTranslation"
                                        ]
                                    }
                                },
                                {
                                    "not": {
                                        "required": [
                                            "Translation"
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "turbulence": {
            "type": "object",
            "title": "Turbulence module schema",
            "description": "Specifies a Turbulence module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Turbulence.",
                    "pattern": "^Turbulence$"
                },
                "Frequency": {
                    "type": "number",
                    "title": "Turbulence module Frequency schema",
                    "description": "Specifies the value of Frequency used in this Turbulence module."
                },
                "Power": {
                    "type": "number",
                    "title": "Turbulence module Power schema",
                    "description": "Specifies the value of Power used in this Turbulence module."
                },
                "Roughness": {
                    "type": "number",
                    "title": "Turbulence module Roughness schema",
                    "description": "Specifies the value of Roughness used in this Turbulence module.",
                    "multipleOf": 1
                },
                "Seed": {
                    "type": "number",
                    "title": "Turbulence module Seed schema",
                    "description": "Specifies the value of Seed used in this Turbulence module.",
                    "multipleOf": 1
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type",
                "SourceModule"
            ]
        },
        "voronoi": {
            "type": "object",
            "title": "Voronoi module schema",
            "description": "Specifies a Voronoi module and its attributes.",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Module type schema",
                    "description": "Specifies that this module is of type Voronoi.",
                    "pattern": "^Voronoi$"
                },
                "Frequency": {
                    "type": "number",
                    "title": "Voronoi module Frequency schema",
                    "description": "Specifies the value of Frequency used in this Voronoi module."
                },
                "Displacement": {
                    "type": "number",
                    "title": "Voronoi module Displacement schema",
                    "description": "Specifies the value of Displacement used in this Voronoi module."
                },
                "EnableDistance": {
                    "type": "boolean",
                    "title": "Voronoi module EnableDistance schema",
                    "description": "Specifies the value of EnableDistance used in this Voronoi module."
                },
                "Seed": {
                    "type": "number",
                    "title": "Voronoi module Seed schema",
                    "description": "Specifies the value of Seed used in this Voronoi module.",
                    "multipleOf": 1
                },
                "SourceModule": {
                    "$ref": "#/definitions/source_module_1"
                },
                "comment": {
                    "$ref": "#/definitions/comment"
                }
            },
            "required": [
                "type"
            ]
        }
    }
}