Merge branch '74_json_schema' into 73_new_json_format
diff --git a/docs/json/animation.json b/docs/json/animation.json
index 61227bf..530ee84 100644
--- a/docs/json/animation.json
+++ b/docs/json/animation.json
@@ -22,6 +22,12 @@
       "description": "Composition Width",
       "type": "number"
     },
+    "ddd": {
+      "title": "3-D",
+      "description": "Composition has 3-D layers",
+      "enum": [0, 1],
+      "type": "number"
+    },
     "h": {
       "title": "Height",
       "description": "Composition Height",
@@ -32,6 +38,11 @@
       "description": "Bodymovin Version",
       "type": "string"
     },
+    "nm": {
+      "title": "Name",
+      "description": "Composition name",
+      "type": "string"
+    },
     "layers": {
       "title": "Layers",
       "description": "List of Composition Layers",
diff --git a/docs/json/effects/angle.json b/docs/json/effects/angle.json
index 7adc798..4d28023 100644
--- a/docs/json/effects/angle.json
+++ b/docs/json/effects/angle.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:0.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 1
     },
     "v": {
       "title": "Value",
diff --git a/docs/json/effects/checkBox.json b/docs/json/effects/checkBox.json
index 30268e7..a7e9039 100644
--- a/docs/json/effects/checkBox.json
+++ b/docs/json/effects/checkBox.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:7.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 7
     },
     "v": {
       "title": "Value",
diff --git a/docs/json/effects/color.json b/docs/json/effects/color.json
index c3368a1..8c7e84b 100644
--- a/docs/json/effects/color.json
+++ b/docs/json/effects/color.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:2.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 2
     },
     "v": {
       "title": "Value",
diff --git a/docs/json/effects/dropDown.json b/docs/json/effects/dropDown.json
index 30268e7..a7e9039 100644
--- a/docs/json/effects/dropDown.json
+++ b/docs/json/effects/dropDown.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:7.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 7
     },
     "v": {
       "title": "Value",
diff --git a/docs/json/effects/fill.json b/docs/json/effects/fill.json
index ec1bbae..8f0aa8f 100644
--- a/docs/json/effects/fill.json
+++ b/docs/json/effects/fill.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:21.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 21
     },
     "ef": {
       "title": "Effects",
diff --git a/docs/json/effects/group.json b/docs/json/effects/group.json
index 15ebe6b..80170fb 100644
--- a/docs/json/effects/group.json
+++ b/docs/json/effects/group.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:5.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 5
     },
     "ef": {
       "title": "Effects",
diff --git a/docs/json/effects/index.json b/docs/json/effects/index.json
index 9f8d990..e09da06 100644
--- a/docs/json/effects/index.json
+++ b/docs/json/effects/index.json
@@ -3,64 +3,49 @@
   "type": "object",
   "oneOf": [
     {
-      "$ref": "#/effects/slider",
-      "value": 0
+      "$ref": "#/effects/slider"
     },
     {
-      "$ref": "#/effects/angle",
-      "value": 1
+      "$ref": "#/effects/angle"
     },
     {
-      "$ref": "#/effects/color",
-      "value": 2
+      "$ref": "#/effects/color"
     },
     {
-      "$ref": "#/effects/point",
-      "value": 3
+      "$ref": "#/effects/point"
     },
     {
-      "$ref": "#/effects/checkbox",
-      "value": 4
+      "$ref": "#/effects/checkbox"
     },
     {
-      "$ref": "#/effects/group",
-      "value": 5
+      "$ref": "#/effects/group"
     },
     {
-      "$ref": "#/effects/noValue",
-      "value": 6
+      "$ref": "#/effects/noValue"
     },
     {
-      "$ref": "#/effects/dropDown",
-      "value": 7
+      "$ref": "#/effects/dropDown"
     },
     {
-      "$ref": "#/effects/customValue",
-      "value": 9
+      "$ref": "#/effects/customValue"
     },
     {
-      "$ref": "#/effects/layerIndex",
-      "value": 10
+      "$ref": "#/effects/layerIndex"
     },
     {
-      "$ref": "#/effects/tint",
-      "value": 20
+      "$ref": "#/effects/tint"
     },
     {
-      "$ref": "#/effects/fill",
-      "value": 21
+      "$ref": "#/effects/fill"
     },
     {
-      "$ref": "#/effects/stroke",
-      "value": 22
+      "$ref": "#/effects/stroke"
     },
     {
-      "$ref": "#/effects/tritone",
-      "value": 23
+      "$ref": "#/effects/tritone"
     },
     {
-      "$ref": "#/effects/proLevels",
-      "value": 24
+      "$ref": "#/effects/proLevels"
     }
   ]
 }
diff --git a/docs/json/effects/layer.json b/docs/json/effects/layer.json
index f6fb605..238d4e9 100644
--- a/docs/json/effects/layer.json
+++ b/docs/json/effects/layer.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:0.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 0
     },
     "v": {
       "title": "Value",
diff --git a/docs/json/effects/point.json b/docs/json/effects/point.json
index f502964..07cd9cb 100644
--- a/docs/json/effects/point.json
+++ b/docs/json/effects/point.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:2.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 2
     },
     "v": {
       "title": "Value",
diff --git a/docs/json/effects/proLevels.json b/docs/json/effects/proLevels.json
index 404da67..76abc5e 100644
--- a/docs/json/effects/proLevels.json
+++ b/docs/json/effects/proLevels.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:23.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 23
     },
     "ef": {
       "title": "Effects",
diff --git a/docs/json/effects/slider.json b/docs/json/effects/slider.json
index fe0d9a2..6896b5d 100644
--- a/docs/json/effects/slider.json
+++ b/docs/json/effects/slider.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:0.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 0
     },
     "v": {
       "title": "Value",
diff --git a/docs/json/effects/stroke.json b/docs/json/effects/stroke.json
index 062c71d..d525ff1 100644
--- a/docs/json/effects/stroke.json
+++ b/docs/json/effects/stroke.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:22.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 22
     },
     "ef": {
       "title": "Effects",
diff --git a/docs/json/effects/tint.json b/docs/json/effects/tint.json
index 2c642d1..522a1d9 100644
--- a/docs/json/effects/tint.json
+++ b/docs/json/effects/tint.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:20.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 20
     },
     "ef": {
       "title": "Effects",
diff --git a/docs/json/effects/tritone.json b/docs/json/effects/tritone.json
index c05fae0..064e4b3 100644
--- a/docs/json/effects/tritone.json
+++ b/docs/json/effects/tritone.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Effect type. Value:23.",
-      "type": "number"
+      "description": "Effect type.",
+      "type": "number",
+      "const": 23
     },
     "ef": {
       "title": "Effects",
diff --git a/docs/json/helpers/blendMode.json b/docs/json/helpers/blendMode.json
index 3b962f3..519dec9 100644
--- a/docs/json/helpers/blendMode.json
+++ b/docs/json/helpers/blendMode.json
@@ -1,70 +1,71 @@
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
+  "type": "number",
   "oneOf": [
     {
       "standsFor": "normal",
-      "value": 0
+      "const": 0
     },
     {
       "standsFor": "multiply",
-      "value": 1
+      "const": 1
     },
     {
       "standsFor": "screen",
-      "value": 2
+      "const": 2
     },
     {
       "standsFor": "overlay",
-      "value": 3
+      "const": 3
     },
     {
       "standsFor": "darken",
-      "value": 4
+      "const": 4
     },
     {
       "standsFor": "lighten",
-      "value": 5
+      "const": 5
     },
     {
       "standsFor": "colorDodge",
-      "value": 6
+      "const": 6
     },
     {
       "standsFor": "colorBurn",
-      "value": 7
+      "const": 7
     },
     {
       "standsFor": "hardLight",
-      "value": 8
+      "const": 8
     },
     {
       "standsFor": "softLight",
-      "value": 9
+      "const": 9
     },
     {
       "standsFor": "difference",
-      "value": 10
+      "const": 10
     },
     {
       "standsFor": "exclusion",
-      "value": 11
+      "const": 11
     },
     {
       "standsFor": "hue",
-      "value": 12
+      "const": 12
     },
     {
       "standsFor": "saturation",
-      "value": 13
+      "const": 13
     },
     {
       "standsFor": "color",
-      "value": 14
+      "const": 14
     },
     {
       "standsFor": "luminosity",
-      "value": 15
+      "const": 15
     }
-  ]
+  ],
+  "default": 0
 }
diff --git a/docs/json/helpers/boolean.json b/docs/json/helpers/boolean.json
index 614ab91..3a72e80 100644
--- a/docs/json/helpers/boolean.json
+++ b/docs/json/helpers/boolean.json
@@ -1,14 +1,14 @@
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
+  "type": "number",
   "oneOf": [
     {
       "standsFor": false,
-      "value": 0
+      "const": 0
     },
     {
       "standsFor": true,
-      "value": 1
+      "const": 1
     }
   ]
 }
diff --git a/docs/json/helpers/composite.json b/docs/json/helpers/composite.json
new file mode 100644
index 0000000..b24c2ff
--- /dev/null
+++ b/docs/json/helpers/composite.json
@@ -0,0 +1,15 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "number",
+  "oneOf": [
+    {
+      "standsFor": "Above",
+      "const": 1
+    },
+    {
+      "standsFor": "Below",
+      "const": 2
+    }
+  ],
+  "default": 1
+}
diff --git a/docs/json/helpers/lineCap.json b/docs/json/helpers/lineCap.json
index 9f60edb..11727a9 100644
--- a/docs/json/helpers/lineCap.json
+++ b/docs/json/helpers/lineCap.json
@@ -1,18 +1,19 @@
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
+  "type": "number",
   "oneOf": [
     {
       "standsFor": "butt",
-      "value": 1
+      "const": 1
     },
     {
       "standsFor": "round",
-      "value": 2
+      "const": 2
     },
     {
       "standsFor": "square",
-      "value": 3
+      "const": 3
     }
-  ]
+  ],
+  "default": 2
 }
diff --git a/docs/json/helpers/lineJoin.json b/docs/json/helpers/lineJoin.json
index 0e074c2..8ce38eb 100644
--- a/docs/json/helpers/lineJoin.json
+++ b/docs/json/helpers/lineJoin.json
@@ -1,18 +1,19 @@
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
+  "type": "number",
   "oneOf": [
     {
       "standsFor": "miter",
-      "value": 1
+      "const": 1
     },
     {
       "standsFor": "round",
-      "value": 2
+      "const": 2
     },
     {
       "standsFor": "bevel",
-      "value": 3
+      "const": 3
     }
-  ]
+  ],
+  "default": 2
 }
diff --git a/docs/json/helpers/mask.json b/docs/json/helpers/mask.json
index 904988f..105067d 100644
--- a/docs/json/helpers/mask.json
+++ b/docs/json/helpers/mask.json
@@ -5,7 +5,8 @@
     "inv": {
       "title": "Inverted",
       "description": "Inverted Mask flag",
-      "type": "boolean"
+      "type": "boolean",
+      "default": false
     },
     "nm": {
       "title": "Name",
@@ -34,12 +35,13 @@
       "type": "object",
       "oneOf": [
         {
-          "$ref": "#/properties/value"
+          "$ref": "#/properties/const"
         },
         {
-          "$ref": "#/properties/valueKeyframed"
+          "$ref": "#/properties/constKeyframed"
         }
-      ]
+      ],
+      "default": {"a":0, "k":100}
     },
     "mode": {
       "title": "Mode",
@@ -48,33 +50,34 @@
       "oneOf": [
         {
           "standsFor": "None",
-          "value": "n"
+          "const": "n"
         },
         {
           "standsFor": "Additive",
-          "value": "a"
+          "const": "a"
         },
         {
           "standsFor": "Subtract",
-          "value": "s"
+          "const": "s"
         },
         {
           "standsFor": "Intersect",
-          "value": "i"
+          "const": "i"
         },
         {
           "standsFor": "Lighten",
-          "value": "l"
+          "const": "l"
         },
         {
           "standsFor": "Darken",
-          "value": "d"
+          "const": "d"
         },
         {
           "standsFor": "Difference",
-          "value": "f"
+          "const": "f"
         }
-      ]
+      ],
+      "default": "a",
     }
   }
 }
diff --git a/docs/json/helpers/testBased.json b/docs/json/helpers/testBased.json
index f3b0fe8..7c5c995 100644
--- a/docs/json/helpers/testBased.json
+++ b/docs/json/helpers/testBased.json
@@ -1,22 +1,23 @@
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
+  "type": "number",
   "oneOf": [
     {
       "standsFor": "Characters",
-      "value": 1
+      "const": 1
     },
     {
       "standsFor": "Character Excluding Spaces",
-      "value": 2
+      "const": 2
     },
     {
       "standsFor": "Words",
-      "value": 3
+      "const": 3
     },
     {
       "standsFor": "Lines",
-      "value": 4
+      "const": 4
     }
-  ]
+  ],
+  "default": 1
 }
diff --git a/docs/json/helpers/textGrouping.json b/docs/json/helpers/textGrouping.json
index 8186ada..00cff14 100644
--- a/docs/json/helpers/textGrouping.json
+++ b/docs/json/helpers/textGrouping.json
@@ -1,22 +1,23 @@
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
+  "type": "number",
   "oneOf": [
     {
       "standsFor": "Characters",
-      "value": 1
+      "const": 1
     },
     {
       "standsFor": "Word",
-      "value": 2
+      "const": 2
     },
     {
       "standsFor": "Line",
-      "value": 3
+      "const": 3
     },
     {
       "standsFor": "All",
-      "value": 4
+      "const": 4
     }
-  ]
+  ],
+  "default": 1
 }
diff --git a/docs/json/helpers/textShape.json b/docs/json/helpers/textShape.json
index 606ba3a..12ae19b 100644
--- a/docs/json/helpers/textShape.json
+++ b/docs/json/helpers/textShape.json
@@ -1,30 +1,31 @@
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
+  "type": "number",
   "oneOf": [
     {
       "standsFor": "Square",
-      "value": 1
+      "const": 1
     },
     {
       "standsFor": "Ramp Up",
-      "value": 2
+      "const": 2
     },
     {
       "standsFor": "Ramp Down",
-      "value": 3
+      "const": 3
     },
     {
       "standsFor": "Triangle",
-      "value": 4
+      "const": 4
     },
     {
       "standsFor": "Round",
-      "value": 5
+      "const": 5
     },
     {
       "standsFor": "Smooth",
-      "value": 6
+      "const": 6
     }
-  ]
+  ],
+  "default": 1
 }
diff --git a/docs/json/helpers/transform.json b/docs/json/helpers/transform.json
index 8fbe2ae..6de8a14 100644
--- a/docs/json/helpers/transform.json
+++ b/docs/json/helpers/transform.json
@@ -11,8 +11,9 @@
         },
         {
           "$ref": "#/properties/multiDimensionalKeyframed"
-        }
+        },
       ],
+      "default": {"a":0, "k":[0, 0, 0]},
       "type": "object"
     },
     "p": {
@@ -26,6 +27,7 @@
           "$ref": "#/properties/multiDimensionalKeyframed"
         }
       ],
+      "default": {"a":0, "k":[0, 0, 0]},
       "type": "object"
     },
     "s": {
@@ -39,6 +41,7 @@
           "$ref": "#/properties/multiDimensionalKeyframed"
         }
       ],
+      "default": {"a":0, "k":[100, 100, 100]},
       "type": "object"
     },
     "r": {
@@ -52,6 +55,7 @@
           "$ref": "#/properties/valueKeyframed"
         }
       ],
+      "default": {"a":0, "k":0},
       "type": "object"
     },
     "o": {
@@ -65,6 +69,7 @@
           "$ref": "#/properties/valueKeyframed"
         }
       ],
+      "default": {"a":0, "k":0},
       "type": "object"
     },
     "px": {
@@ -78,6 +83,7 @@
           "$ref": "#/properties/valueKeyframed"
         }
       ],
+      "default": {"a":0, "k":0},
       "type": "object"
     },
     "py": {
@@ -91,6 +97,49 @@
           "$ref": "#/properties/valueKeyframed"
         }
       ],
+      "default": {"a":0, "k":0},
+      "type": "object"
+    },
+    "pz": {
+      "title": "Position Z",
+      "description": "Transform Position Z",
+      "oneOf": [
+        {
+          "$ref": "#/properties/value"
+        },
+        {
+          "$ref": "#/properties/valueKeyframed"
+        }
+      ],
+      "default": {"a":0, "k":0},
+      "type": "object"
+    },
+    "sk": {
+      "title": "Skew",
+      "description": "Transform Skew",
+      "oneOf": [
+        {
+          "$ref": "#/properties/value"
+        },
+        {
+          "$ref": "#/properties/valueKeyframed"
+        }
+      ],
+      "default": {"a":0, "k":0},
+      "type": "object"
+    },
+    "sa": {
+      "title": "Skew Axis",
+      "description": "Transform Skew Axis",
+      "oneOf": [
+        {
+          "$ref": "#/properties/value"
+        },
+        {
+          "$ref": "#/properties/valueKeyframed"
+        }
+      ],
+      "default": {"a":0, "k":0},
       "type": "object"
     }
   }
diff --git a/docs/json/layers/image.json b/docs/json/layers/image.json
index 51b1c6e..208f0a1 100644
--- a/docs/json/layers/image.json
+++ b/docs/json/layers/image.json
@@ -4,8 +4,9 @@
   "properties": {
     "ty": {
       "title": "Type",
-      "description": "Type of layer: Image. Value 2.",
-      "type": "number"
+      "description": "Type of layer: Image.",
+      "type": "number",
+      "const": 2
     },
     "ks": {
       "title": "Transform",
@@ -25,7 +26,8 @@
         {
           "$ref": "#/helpers/boolean"
         }
-      ]
+      ],
+      "default": 0
     },
     "bm": {
       "title": "Blend Mode",
@@ -35,7 +37,8 @@
         {
           "$ref": "#/helpers/blendMode"
         }
-      ]
+      ],
+      "default": 0
     },
     "ddd": {
       "title": "3d Layer",
@@ -45,7 +48,8 @@
         {
           "$ref": "#/helpers/boolean"
         }
-      ]
+      ],
+      "default": 0
     },
     "ind": {
       "title": "Index",
@@ -116,7 +120,8 @@
     "sr": {
       "title": "Stretch",
       "description": "Layer Time Stretching",
-      "type": "number"
+      "type": "number",
+      "default": 1
     },
     "parent": {
       "title": "Parent",
diff --git a/docs/json/layers/null.json b/docs/json/layers/null.json
index 58b9285..7a1f5b6 100644
--- a/docs/json/layers/null.json
+++ b/docs/json/layers/null.json
@@ -4,8 +4,9 @@
   "properties": {
     "ty": {
       "title": "Type",
-      "description": "Type of layer: Null. Value 3.",
-      "type": "number"
+      "description": "Type of layer: Null.",
+      "type": "number",
+      "const": 3
     },
     "ks": {
       "title": "Transform",
@@ -25,7 +26,8 @@
         {
           "$ref": "#/helpers/boolean"
         }
-      ]
+      ],
+      "default": 0
     },
     "ddd": {
       "title": "3d Layer",
@@ -35,7 +37,8 @@
         {
           "$ref": "#/helpers/boolean"
         }
-      ]
+      ],
+      "default": 0
     },
     "ind": {
       "title": "Index",
@@ -88,7 +91,8 @@
     "sr": {
       "title": "Stretch",
       "description": "Layer Time Stretching",
-      "type": "number"
+      "type": "number",
+      "default": 1
     },
     "parent": {
       "title": "Parent",
diff --git a/docs/json/layers/preComp.json b/docs/json/layers/preComp.json
index 6119b7c..5e2a9b5 100644
--- a/docs/json/layers/preComp.json
+++ b/docs/json/layers/preComp.json
@@ -4,8 +4,9 @@
   "properties": {
     "ty": {
       "title": "Type",
-      "description": "Type of layer: Precomp. Value 0.",
-      "type": "number"
+      "description": "Type of layer: Precomp.",
+      "type": "number",
+      "const": 0
     },
     "ks": {
       "title": "Transform",
@@ -35,7 +36,8 @@
         {
           "$ref": "#/helpers/blendMode"
         }
-      ]
+      ],
+      "default": 0
     },
     "ddd": {
       "title": "3d Layer",
@@ -45,7 +47,8 @@
         {
           "$ref": "#/helpers/boolean"
         }
-      ]
+      ],
+      "default": 0
     },
     "ind": {
       "title": "Index",
@@ -116,7 +119,8 @@
     "sr": {
       "title": "Stretch",
       "description": "Layer Time Stretching",
-      "type": "number"
+      "type": "number",
+      "default": 1
     },
     "parent": {
       "title": "Parent",
diff --git a/docs/json/layers/shape.json b/docs/json/layers/shape.json
index 57b13e8..b08c62a 100644
--- a/docs/json/layers/shape.json
+++ b/docs/json/layers/shape.json
@@ -4,8 +4,9 @@
   "properties": {
     "ty": {
       "title": "Type",
-      "description": "Type of layer: Shape. Value 4.",
-      "type": "number"
+      "description": "Type of layer: Shape.",
+      "type": "number",
+      "const": 4
     },
     "ks": {
       "title": "Transform",
@@ -25,7 +26,8 @@
           "$ref": "#/helpers/boolean"
         }
       ],
-      "type": "number"
+      "type": "number",
+      "default": 0
     },
     "bm": {
       "title": "Blend Mode",
@@ -35,7 +37,8 @@
           "$ref": "#/helpers/blendMode"
         }
       ],
-      "type": "number"
+      "type": "number",
+      "default": 0
     },
     "ddd": {
       "title": "3d Layer",
@@ -45,7 +48,8 @@
           "$ref": "#/helpers/boolean"
         }
       ],
-      "type": "number"
+      "type": "number",
+      "default": 0
     },
     "ind": {
       "title": "Index",
@@ -116,7 +120,8 @@
     "sr": {
       "title": "Stretch",
       "description": "Layer Time Stretching",
-      "type": "number"
+      "type": "number",
+      "default": 1
     },
     "parent": {
       "title": "Parent",
@@ -129,52 +134,43 @@
       "items": {
         "oneOf": [
           {
-            "$ref": "#/shapes/shape",
-            "value": "sh"
+            "$ref": "#/shapes/shape"
           },
           {
-            "$ref": "#/shapes/rect",
-            "value": "rc"
+            "$ref": "#/shapes/rect"
           },
           {
-            "$ref": "#/shapes/ellipse",
-            "value": "el"
+            "$ref": "#/shapes/ellipse"
           },
           {
-            "$ref": "#/shapes/star",
-            "value": "sr"
+            "$ref": "#/shapes/star"
           },
           {
-            "$ref": "#/shapes/fill",
-            "value": "fl"
+            "$ref": "#/shapes/fill"
           },
           {
-            "$ref": "#/shapes/gFill",
-            "value": "gf"
+            "$ref": "#/shapes/gFill"
           },
           {
-            "$ref": "#/shapes/gStroke",
-            "value": "gs"
+            "$ref": "#/shapes/gStroke"
           },
           {
-            "$ref": "#/shapes/stroke",
-            "value": "st"
+            "$ref": "#/shapes/stroke"
           },
           {
-            "$ref": "#/shapes/merge",
-            "value": "mm"
+            "$ref": "#/shapes/merge"
           },
           {
-            "$ref": "#/shapes/trim",
-            "value": "tm"
+            "$ref": "#/shapes/trim"
           },
           {
-            "$ref": "#/shapes/group",
-            "value": "gr"
+            "$ref": "#/shapes/group"
           },
           {
-            "$ref": "#/shapes/roundedCorners",
-            "value": "rd"
+            "$ref": "#/shapes/roundedCorners"
+          },
+          {
+            "$ref": "#/shapes/repeater"
           }
         ],
         "type": "object"
diff --git a/docs/json/layers/solid.json b/docs/json/layers/solid.json
index f3dc33f..5567ece 100644
--- a/docs/json/layers/solid.json
+++ b/docs/json/layers/solid.json
@@ -4,8 +4,9 @@
   "properties": {
     "ty": {
       "title": "Type",
-      "description": "Type of layer: Solid. Value 1.",
-      "type": "number"
+      "description": "Type of layer: Solid.",
+      "type": "number",
+      "value": 1
     },
     "ks": {
       "title": "Transform",
@@ -25,7 +26,8 @@
         {
           "$ref": "#/helpers/boolean"
         }
-      ]
+      ],
+      "default": 0
     },
     "bm": {
       "title": "Blend Mode",
@@ -35,7 +37,8 @@
           "$ref": "#/helpers/blendMode"
         }
       ],
-      "type": "number"
+      "type": "number",
+      "default": 0
     },
     "ddd": {
       "title": "3d Layer",
@@ -45,7 +48,8 @@
         {
           "$ref": "#/helpers/boolean"
         }
-      ]
+      ],
+      "default": 0
     },
     "ind": {
       "title": "Index",
@@ -113,7 +117,8 @@
     "sr": {
       "title": "Stretch",
       "description": "Layer Time Stretching",
-      "type": "number"
+      "type": "number",
+      "default": 1
     },
     "parent": {
       "title": "Parent",
diff --git a/docs/json/layers/text.json b/docs/json/layers/text.json
index 8d62b89..34d8a42 100644
--- a/docs/json/layers/text.json
+++ b/docs/json/layers/text.json
@@ -4,8 +4,9 @@
   "properties": {
     "ty": {
       "title": "Type",
-      "description": "Type of layer: Text. Value 5.",
-      "type": "number"
+      "description": "Type of layer: Text.",
+      "type": "number",
+      "value": 5
     },
     "ks": {
       "title": "Transform",
@@ -25,7 +26,8 @@
           "$ref": "#/helpers/boolean"
         }
       ],
-      "type": "number"
+      "type": "number",
+      "default": 0
     },
     "bm": {
       "title": "Blend Mode",
@@ -35,7 +37,8 @@
           "$ref": "#/helpers/blendMode"
         }
       ],
-      "type": "number"
+      "type": "number",
+      "default": 0
     },
     "ddd": {
       "title": "3d Layer",
@@ -45,7 +48,8 @@
           "$ref": "#/helpers/boolean"
         }
       ],
-      "type": "number"
+      "type": "number",
+      "default": 0
     },
     "ind": {
       "title": "Index",
@@ -113,7 +117,8 @@
     "sr": {
       "title": "Stretch",
       "description": "Layer Time Stretching",
-      "type": "number"
+      "type": "number",
+      "default": 1
     },
     "parent": {
       "title": "Parent",
diff --git a/docs/json/shapes/ellipse.json b/docs/json/shapes/ellipse.json
index b3ae616..414f0a0 100644
--- a/docs/json/shapes/ellipse.json
+++ b/docs/json/shapes/ellipse.json
@@ -15,12 +15,14 @@
     "d": {
       "title": "Direction",
       "description": "After Effect's Direction. Direction how the shape is drawn. Used for trim path for example.",
-      "type": "number"
+      "type": "number",
+      "default": 1
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: el",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "el"
     },
     "p": {
       "title": "Position",
diff --git a/docs/json/shapes/fill.json b/docs/json/shapes/fill.json
index 15daed4..cbb9d31 100644
--- a/docs/json/shapes/fill.json
+++ b/docs/json/shapes/fill.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: fl",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "fl"
     },
     "o": {
       "title": "Opacity",
diff --git a/docs/json/shapes/gFill.json b/docs/json/shapes/gFill.json
index e543b19..4a8893d 100644
--- a/docs/json/shapes/gFill.json
+++ b/docs/json/shapes/gFill.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: gf",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "gf"
     },
     "o": {
       "title": "Opacity",
diff --git a/docs/json/shapes/gStroke.json b/docs/json/shapes/gStroke.json
index 12833fd..0f4ef4e 100644
--- a/docs/json/shapes/gStroke.json
+++ b/docs/json/shapes/gStroke.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: gs",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "gs"
     },
     "o": {
       "title": "Opacity",
diff --git a/docs/json/shapes/group.json b/docs/json/shapes/group.json
index cc8b0c2..4e09d97 100644
--- a/docs/json/shapes/group.json
+++ b/docs/json/shapes/group.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: gr",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "gr"
     },
     "np": {
       "title": "Number of Properties",
diff --git a/docs/json/shapes/merge.json b/docs/json/shapes/merge.json
index 9fbe91e..56e82a7 100644
--- a/docs/json/shapes/merge.json
+++ b/docs/json/shapes/merge.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: tm. THIS FEATURE IS NOT SUPPORTED. It's exported because if you export it, they will come.",
-      "type": "string"
+      "description": "Shape content type. THIS FEATURE IS NOT SUPPORTED. It's exported because if you export it, they will come.",
+      "type": "string",
+      "const": "mm"
     },
     "mm": {
       "title": "Merge Mode",
diff --git a/docs/json/shapes/rect.json b/docs/json/shapes/rect.json
index 1bb87a2..1a13199 100644
--- a/docs/json/shapes/rect.json
+++ b/docs/json/shapes/rect.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: rc",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "rc"
     },
     "p": {
       "title": "Position",
diff --git a/docs/json/shapes/repeater.json b/docs/json/shapes/repeater.json
new file mode 100644
index 0000000..ae42c5a
--- /dev/null
+++ b/docs/json/shapes/repeater.json
@@ -0,0 +1,71 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "mn": {
+      "title": "Match Name",
+      "description": "After Effect's Match Name. Used for expressions.",
+      "type": "string"
+    },
+    "nm": {
+      "title": "Name",
+      "description": "After Effect's Name. Used for expressions.",
+      "type": "string"
+    },
+    "ty": {
+      "title": "Type",
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "rp"
+    },
+    "c": {
+      "title": "Copies",
+      "description": "Number of Copies",
+      "oneOf": [
+        {
+          "$ref": "#/properties/Value"
+        },
+        {
+          "$ref": "#/properties/valueKeyframed"
+        }
+      ],
+      "type": "object",
+      "default": {"a": 0, "k": 1}
+    },
+    "o": {
+      "title": "Offset",
+      "description": "Offset of Copies",
+      "oneOf": [
+        {
+          "$ref": "#/properties/Value"
+        },
+        {
+          "$ref": "#/properties/valueKeyframed"
+        }
+      ],
+      "type": "object",
+      "default": {"a": 0, "k": 0}
+    },
+    "m": {
+      "title": "Composite",
+      "description": "Composite of copies",
+      "oneOf": [
+        {
+          "$ref": "#/helpers/composite"
+        }
+      ],
+      "type": "number",
+      "default": 1
+    },
+    "tr": {
+      "title": "Transform",
+      "description": "Transform values for each repeater copy",
+      "oneOf": [
+        {
+          "$ref": "#/helpers/transform"
+        }
+      ],
+      "type": "object"
+    }
+  }
+}
diff --git a/docs/json/shapes/round.json b/docs/json/shapes/round.json
index 4cb1502..c359c0a 100644
--- a/docs/json/shapes/round.json
+++ b/docs/json/shapes/round.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: rd",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "rd"
     },
     "r": {
       "title": "Radius",
diff --git a/docs/json/shapes/shape.json b/docs/json/shapes/shape.json
index bbf9f38..1083ebb 100644
--- a/docs/json/shapes/shape.json
+++ b/docs/json/shapes/shape.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: sh",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "sh"
     },
     "ks": {
       "title": "Vertices",
diff --git a/docs/json/shapes/star.json b/docs/json/shapes/star.json
index 8b0d50d..4e236fc 100644
--- a/docs/json/shapes/star.json
+++ b/docs/json/shapes/star.json
@@ -19,8 +19,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: sr",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "sr"
     },
     "p": {
       "title": "Position",
diff --git a/docs/json/shapes/stroke.json b/docs/json/shapes/stroke.json
index 99b22e8..ac8a7b8 100644
--- a/docs/json/shapes/stroke.json
+++ b/docs/json/shapes/stroke.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: st",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "st"
     },
     "lc": {
       "title": "Line Cap",
diff --git a/docs/json/shapes/trim.json b/docs/json/shapes/trim.json
index b46ccd7..afc5a35 100644
--- a/docs/json/shapes/trim.json
+++ b/docs/json/shapes/trim.json
@@ -14,8 +14,9 @@
     },
     "ty": {
       "title": "Type",
-      "description": "Shape content type. Value: tm",
-      "type": "string"
+      "description": "Shape content type.",
+      "type": "string",
+      "const": "tm"
     },
     "s": {
       "title": "Start",