├── .devcontainer ├── Dockerfile └── devcontainer.json ├── .github └── workflows │ ├── pages.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── CONTRIBUTING.md ├── COPYING ├── Makefile ├── README.md ├── catalog-info.yaml ├── codemirror ├── editor.js ├── package.json └── rollup.config.js ├── docs ├── Introduction.md ├── advanced_interactions.md ├── assets.md ├── breakdown │ ├── bezier.md │ ├── bouncy_ball.md │ ├── images │ │ └── builder │ │ │ ├── adding_shapes.png │ │ │ ├── adding_shapes.xml │ │ │ ├── animation.png │ │ │ ├── animation.xml │ │ │ ├── animation_out_point.png │ │ │ ├── basic_properties.xml │ │ │ ├── final.xml │ │ │ ├── layer_out_point.png │ │ │ ├── more_props.png │ │ │ ├── setting_up.png │ │ │ ├── setting_up.xml │ │ │ ├── shape_position.png │ │ │ ├── star.png │ │ │ └── star.xml │ ├── lottie_from_scratch.md │ └── precomps.md ├── compat.md ├── composition.md ├── constants.md ├── effects.md ├── expressions.md ├── helpers.md ├── index.md ├── layers.md ├── playground │ ├── builder.md │ └── json_editor.md ├── properties.md ├── rendering.md ├── schema.md ├── scripts │ ├── editor.bundle.js │ ├── explain_worker.js │ ├── json_editor.js │ ├── lottie_bezier.js │ ├── lottie_blockly.js │ ├── lottie_explain.js │ ├── lottie_matrix.js │ ├── lottie_raw_utils.js │ ├── playground_data.js │ ├── simple_shader.js │ └── value_editors.js ├── shapes.md ├── static │ ├── examples │ │ ├── 3d_layers.json │ │ ├── 3d_layers_animation.json │ │ ├── 3d_parenting.json │ │ ├── auto_orient.json │ │ ├── bezier.json │ │ ├── bezier_expression.json │ │ ├── blend_mode.json │ │ ├── blep.png │ │ ├── bouncy_ball.json │ │ ├── camera.json │ │ ├── easing.json │ │ ├── effects-blur.json │ │ ├── effects-bulge.json │ │ ├── effects-fill.json │ │ ├── effects-matte3-image.json │ │ ├── effects-matte3.json │ │ ├── effects-prolevels.json │ │ ├── effects-shadow.json │ │ ├── effects-stroke.json │ │ ├── effects-tint.json │ │ ├── effects-tritone.json │ │ ├── effects-wave.json │ │ ├── ellipse.json │ │ ├── fill.json │ │ ├── font-css.json │ │ ├── font-local.json │ │ ├── font-url.json │ │ ├── fractal.json │ │ ├── gradient-stroke.json │ │ ├── gradient.json │ │ ├── image.json │ │ ├── image_animated.json │ │ ├── layer_order.json │ │ ├── layers-solid.json │ │ ├── mask.json │ │ ├── matte.json │ │ ├── offset-path.json │ │ ├── parenting.json │ │ ├── precomp │ │ │ ├── circle.json │ │ │ ├── star-circle.json │ │ │ ├── star-comp.json │ │ │ ├── star-nocomp.json │ │ │ └── star-splosion.json │ │ ├── pucker_bloat.json │ │ ├── rectangle.json │ │ ├── remapping.json │ │ ├── repeater.json │ │ ├── rounded_corners.json │ │ ├── slots.json │ │ ├── sound.mp3 │ │ ├── star.json │ │ ├── stroke.json │ │ ├── text-document.json │ │ ├── text-selector.json │ │ ├── text.json │ │ ├── text_shape.png │ │ ├── thumbs-up.png │ │ ├── transform.json │ │ ├── trim_path.json │ │ └── zig-zag.json │ ├── expressions.json │ └── expressions.schema.json ├── style │ ├── editor.css │ ├── lottie-theme.css │ └── style.css ├── text.md └── values.md ├── mkdocs.yml ├── requirements.txt ├── schema ├── assets │ ├── all-assets.json │ ├── asset.json │ ├── data-source.json │ ├── file-asset.json │ ├── image.json │ ├── precomposition.json │ └── sound.json ├── composition │ ├── animation.json │ ├── composition.json │ ├── metadata.json │ ├── motion-blur.json │ └── user-metadata.json ├── constants │ ├── blend-mode.json │ ├── composite.json │ ├── fill-rule.json │ ├── font-path-origin.json │ ├── gradient-type.json │ ├── line-cap.json │ ├── line-join.json │ ├── mask-mode.json │ ├── matte-mode.json │ ├── merge-mode.json │ ├── shape-direction.json │ ├── star-type.json │ ├── stroke-dash-type.json │ ├── text-based.json │ ├── text-caps.json │ ├── text-grouping.json │ ├── text-justify.json │ ├── text-range-units.json │ ├── text-shape.json │ └── trim-multiple-shapes.json ├── effect-values │ ├── all-effect-values.json │ ├── angle.json │ ├── checkbox.json │ ├── color.json │ ├── drop-down.json │ ├── effect-value.json │ ├── ignored.json │ ├── layer.json │ ├── no-value.json │ ├── point.json │ └── slider.json ├── effects │ ├── all-effects.json │ ├── custom-effect.json │ ├── displacement-map-effect.json │ ├── drop-shadow-effect.json │ ├── effect.json │ ├── fill-effect.json │ ├── gaussian-blur-effect.json │ ├── matte3-effect.json │ ├── mesh-warp-effect.json │ ├── pro-levels-effect.json │ ├── puppet-effect.json │ ├── radial-wipe-effect.json │ ├── spherize-effect.json │ ├── stroke-effect.json │ ├── tint-effect.json │ ├── tritone-effect.json │ ├── twirl-effect.json │ └── wavy-effect.json ├── helpers │ ├── marker.json │ ├── mask.json │ ├── slot.json │ ├── slottable-object.json │ ├── transform.json │ └── visual-object.json ├── layers │ ├── all-layers.json │ ├── audio-layer.json │ ├── audio-settings.json │ ├── camera-layer.json │ ├── data-layer.json │ ├── image-layer.json │ ├── layer.json │ ├── null-layer.json │ ├── precomposition-layer.json │ ├── shape-layer.json │ ├── solid-layer.json │ ├── text-layer.json │ ├── unknown-layer.json │ └── visual-layer.json ├── properties │ ├── base-keyframe.json │ ├── bezier-keyframe.json │ ├── bezier-property.json │ ├── color-keyframe.json │ ├── color-property.json │ ├── easing-handle.json │ ├── gradient-keyframe.json │ ├── gradient-property.json │ ├── gradient-stops.json │ ├── position-keyframe.json │ ├── position-property.json │ ├── property.json │ ├── scalar-property.json │ ├── split-position.json │ ├── splittable-position-property.json │ ├── vector-keyframe.json │ └── vector-property.json ├── root.json ├── shapes │ ├── all-graphic-elements.json │ ├── base-gradient.json │ ├── base-stroke.json │ ├── ellipse.json │ ├── fill.json │ ├── gradient-fill.json │ ├── gradient-stroke.json │ ├── graphic-element.json │ ├── group.json │ ├── merge.json │ ├── modifier.json │ ├── no-style.json │ ├── offset-path.json │ ├── path.json │ ├── polystar.json │ ├── pucker-bloat.json │ ├── rectangle.json │ ├── repeater-transform.json │ ├── repeater.json │ ├── rounded-corners.json │ ├── shape-style.json │ ├── shape.json │ ├── stroke-dash.json │ ├── stroke.json │ ├── transform.json │ ├── trim-path.json │ ├── twist.json │ ├── unknown-shape.json │ └── zig-zag.json ├── styles │ ├── all-layer-styles.json │ ├── bevel-emboss-style.json │ ├── color-overlay-style.json │ ├── drop-shadow-style.json │ ├── gradient-overlay-style.json │ ├── inner-glow-style.json │ ├── inner-shadow-style.json │ ├── layer-style.json │ ├── outer-glow-style.json │ ├── satin-style.json │ └── stroke-style.json ├── text │ ├── animated-text-document.json │ ├── character-data.json │ ├── character-precomp.json │ ├── character-shapes.json │ ├── font-list.json │ ├── font.json │ ├── text-alignment-options.json │ ├── text-data.json │ ├── text-document-keyframe.json │ ├── text-document.json │ ├── text-follow-path.json │ ├── text-range-selector.json │ ├── text-range.json │ └── text-style.json └── values │ ├── bezier.json │ ├── color.json │ ├── data-url.json │ ├── gradient.json │ ├── hexcolor.json │ ├── int-boolean.json │ └── vector.json ├── theme ├── base.html ├── fonts │ ├── Karla-Bold.ttf │ ├── Karla-Italic-VariableFont_wght.ttf │ ├── Karla-VariableFont_wght.ttf │ ├── Type-Ø-Tones-Arboria-Black.otf │ └── Type-Ø-Tones-Arboria-Bold.otf ├── img │ ├── LottieDocs.svg │ ├── chevron-left.svg │ ├── chevron-right.svg │ ├── favicon.ico │ ├── icon-right-arrow.svg │ ├── icon-search.svg │ ├── lf-logo-mini.svg │ ├── logo-lottie.svg │ ├── logo-react.svg │ ├── logo-svelte.svg │ └── vue-logo.svg ├── js │ └── base.js ├── main.html ├── nav.html └── toc.html └── tools ├── bezier_test.html ├── effects-to-schema.py ├── expression_convert.py ├── generate-blockly.py └── md_extensions.py /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.9 -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": { "dockerfile": "Dockerfile" } 3 | } -------------------------------------------------------------------------------- /.github/workflows/pages.yml: -------------------------------------------------------------------------------- 1 | name: Build Pages 2 | on: 3 | push: 4 | branches: 5 | - main 6 | workflow_dispatch: 7 | jobs: 8 | publish: 9 | runs-on: ubuntu-24.04 10 | steps: 11 | - 12 | name: Checkout 13 | uses: actions/checkout@v2 14 | - 15 | name: Setup 16 | run: | 17 | sudo apt update -q 18 | sudo apt install -yy python3 python3-pip python3-virtualenv make graphviz 19 | make install_dependencies 20 | - 21 | name: Docs 22 | run: | 23 | make docs 24 | - 25 | name: Validate 26 | run: | 27 | make validate 28 | make validate_links 29 | - 30 | name: Deploy to GitHub Pages 31 | if: success() 32 | uses: crazy-max/ghaction-github-pages@v2 33 | with: 34 | target_branch: gh-pages 35 | build_dir: site 36 | env: 37 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 38 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | branches: 8 | - main 9 | 10 | jobs: 11 | build: 12 | name: Publish Schema 13 | runs-on: ubuntu-24.04 14 | steps: 15 | - 16 | uses: actions/checkout@v2 17 | - 18 | name: Setup 19 | run: | 20 | sudo apt update -q 21 | sudo apt install -yy python3 python3-pip python3-virtualenv make graphviz 22 | make install_dependencies 23 | - 24 | name: Build 25 | run: | 26 | make lottie.schema.json 27 | - 28 | name: Upload Schema 29 | if: ${{ contains(github.ref, '/tags/') }} 30 | uses: softprops/action-gh-release@v1 31 | with: 32 | token: ${{ secrets.GITHUB_TOKEN }} 33 | files: docs/lottie.schema.json 34 | tag_name: ${{ github.ref }} 35 | overwrite: true 36 | - 37 | name: Upload Schema 38 | if: ${{ !contains(github.ref, '/tags/') }} 39 | uses: softprops/action-gh-release@v1 40 | with: 41 | token: ${{ secrets.GITHUB_TOKEN }} 42 | files: docs/lottie.schema.json 43 | tag_name: latest 44 | overwrite: true 45 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: pull_request 3 | jobs: 4 | test: 5 | runs-on: ubuntu-24.04 6 | steps: 7 | - 8 | name: Checkout 9 | uses: actions/checkout@v2 10 | - 11 | name: Setup 12 | run: | 13 | sudo apt update -q 14 | sudo apt install -yy python3 python3-pip python3-virtualenv make graphviz 15 | make install_dependencies 16 | - 17 | name: Docs 18 | run: | 19 | make docs 20 | - 21 | name: Validate 22 | run: | 23 | make validate 24 | make validate_links 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | site/ 2 | docs/lottie.schema.json 3 | docs/scripts/blockly_generated.js 4 | codemirror/node_modules/ 5 | codemirror/package-lock.json 6 | docs/lottie.js 7 | tools/dist/ 8 | tools/lottie_docs.egg-info/ 9 | tools/lottie_docs/lottie.schema.json 10 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Executable names 2 | PIP ?= pip 3 | PYTHON ?= python 4 | MKDOCS ?= PYTHONPATH="$(SOURCE_DIR)/tools" mkdocs 5 | 6 | # Paths 7 | SOURCE_DIR = $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) 8 | OUTPUT_DIR ?= $(CURDIR)/site 9 | CANIUSE_DIR ?= $(SOURCE_DIR)/../caniuse/data 10 | 11 | .PHONY: all install_dependencies docs docs_serve lottie.schema.json validate validate_links, validate_caniuse 12 | 13 | 14 | all: docs 15 | 16 | lottie.schema.json:$(SOURCE_DIR)/docs/lottie.schema.json 17 | 18 | $(SOURCE_DIR)/docs/lottie.schema.json: $(wildcard $(SOURCE_DIR)/schema/**/*.json) 19 | schema-merge.py 20 | 21 | docs:$(SOURCE_DIR)/docs/lottie.schema.json 22 | docs:$(SOURCE_DIR)/docs/scripts/blockly_generated.js 23 | $(MKDOCS) build -f $(SOURCE_DIR)/mkdocs.yml -d $(OUTPUT_DIR) 24 | 25 | $(OUTPUT_DIR)/index.html:$(wildcard $(SOURCE_DIR)/docs/**/*) 26 | $(OUTPUT_DIR)/index.html:$(SOURCE_DIR)/docs/lottie.schema.json 27 | $(OUTPUT_DIR)/index.html:$(SOURCE_DIR)/tools/md_extensions.py 28 | $(OUTPUT_DIR)/index.html:docs 29 | 30 | docs_serve:$(SOURCE_DIR)/docs/lottie.schema.json 31 | $(MKDOCS) serve -f $(SOURCE_DIR)/mkdocs.yml 32 | 33 | install_dependencies: 34 | $(PIP) install -r $(SOURCE_DIR)/requirements.txt 35 | 36 | validate: $(SOURCE_DIR)/docs/lottie.schema.json 37 | schema-validate.py 38 | 39 | 40 | validate_links:$(OUTPUT_DIR)/index.html 41 | schema-validate.py --html $(OUTPUT_DIR) -i assets/file-asset -i effect-values/effect-value 42 | 43 | $(SOURCE_DIR)/docs/scripts/blockly_generated.js: $(SOURCE_DIR)/tools/generate-blockly.py 44 | $(SOURCE_DIR)/docs/scripts/blockly_generated.js: $(SOURCE_DIR)/docs/lottie.schema.json 45 | $(SOURCE_DIR)/tools/generate-blockly.py 46 | 47 | validate_caniuse: $(SOURCE_DIR)/docs/lottie.schema.json 48 | $(SOURCE_DIR)/tools/caniuse.py '$(CANIUSE_DIR)' 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Lottie Documentation 2 | ==================== 3 | 4 | This repository contains both human-readable and machine-readable documentation about the Lottie format 5 | 6 | The documentation is available online at https://lottiefiles.github.io/lottie-docs/ 7 | 8 | License 9 | ------- 10 | 11 | CC-BY 4.0 12 | 13 | 14 | Setting Up 15 | ---------- 16 | 17 | This project uses `mkdocs` to generate the HTML pages from the documentation, 18 | and `pip` to install dependencies. 19 | 20 | It's recommended you install dependencies on some kind of virtual environment. 21 | 22 | Once you have your environment, you can run 23 | 24 | pip install requirements.txt 25 | 26 | or 27 | 28 | make install_dependencies 29 | 30 | 31 | Building the Docs 32 | ----------------- 33 | 34 | You can use 35 | 36 | make 37 | 38 | To build the static HTML. 39 | 40 | During development, you might want to use 41 | 42 | make docs_serve 43 | 44 | Which spins up a local server to host the docs and automatically reloads when done 45 | 46 | 47 | Finding Unknown Features 48 | ------------------------ 49 | 50 | You can run `./tools/unknown_features.js` and pass file names as arguments 51 | and it will print a summary of unknown features in the given files. 52 | 53 | Note that it requires modern versions of node and the compiled schema. 54 | 55 | 56 | Example with setup: 57 | 58 | # Build the schema 59 | make lottie.schema.json 60 | 61 | # Install newer node on python virtualenv 62 | pip install nodeenv 63 | nodeenv -p 64 | 65 | # Run on several files 66 | ./tools/unknown_features.js /my/lotties/*.json 67 | -------------------------------------------------------------------------------- /catalog-info.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: backstage.io/v1alpha1 2 | kind: Component 3 | metadata: 4 | name: lottie-docs 5 | description: Documentation for the lottie file format 6 | annotations: 7 | github.com/project-slug: LottieFiles/lottie-docs 8 | lighthouse.com/website-url: https://lottiefiles.github.io/lottie-docs/ 9 | spec: 10 | type: website 11 | lifecycle: production 12 | owner: rnd 13 | -------------------------------------------------------------------------------- /codemirror/editor.js: -------------------------------------------------------------------------------- 1 | /* 2 | Generate bundle with 3 | node_modules/.bin/rollup -c 4 | */ 5 | import {basicSetup} from "codemirror" 6 | export {javascript} from "@codemirror/lang-javascript" 7 | export {json, jsonParseLinter} from "@codemirror/lang-json" 8 | export {EditorState, StateField, StateEffect} from "@codemirror/state" 9 | export {undo, redo} from "@codemirror/commands" 10 | import {defaultKeymap, history, historyKeymap, indentWithTab, redo} from "@codemirror/commands" 11 | import {keymap, EditorView, Decoration} from "@codemirror/view" 12 | export { 13 | EditorView, 14 | WidgetType, 15 | Decoration, 16 | ViewPlugin, 17 | keymap, 18 | showTooltip, 19 | getPanel, 20 | showPanel 21 | } from "@codemirror/view" 22 | import { 23 | syntaxHighlighting, 24 | defaultHighlightStyle, 25 | indentUnit, 26 | HighlightStyle 27 | } from "@codemirror/language" 28 | export {ensureSyntaxTree, LanguageSupport} from "@codemirror/language" 29 | import {tags} from "@lezer/highlight" 30 | export { 31 | linter, 32 | lintGutter, 33 | lintKeymap, 34 | setDiagnostics, 35 | openLintPanel, 36 | nextDiagnostic, 37 | } from "@codemirror/lint"; 38 | export {autocompletion, insertCompletionText} from "@codemirror/autocomplete"; 39 | import {gotoLine} from "@codemirror/search"; 40 | export {openSearchPanel, gotoLine} from "@codemirror/search"; 41 | 42 | 43 | 44 | const myHighlightStyle = HighlightStyle.define([ 45 | { tag: tags.propertyName, color: "#d14" }, 46 | ]); 47 | 48 | 49 | export const default_extensions = [ 50 | history(), 51 | keymap.of([ 52 | {key: "Mod-g", scope: "editor", run: gotoLine, preventDefault: true}, 53 | ...defaultKeymap, 54 | ...historyKeymap, 55 | indentWithTab, 56 | {linux: "Mod-Shift-z", run: redo, preventDefault: true}, 57 | ]), 58 | basicSetup, 59 | syntaxHighlighting(defaultHighlightStyle), 60 | syntaxHighlighting(myHighlightStyle), 61 | indentUnit.of(" ") 62 | ]; 63 | 64 | export function on_change(callback) 65 | { 66 | return EditorView.updateListener.of((update) => 67 | { 68 | if (update.docChanged) 69 | callback(update); 70 | }); 71 | } 72 | -------------------------------------------------------------------------------- /codemirror/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@codemirror/lang-javascript": "^6.0.0", 4 | "@codemirror/lang-json": "^6.0.0", 5 | "@rollup/plugin-node-resolve": "^13.3.0", 6 | "codemirror": "^6.0.0", 7 | "rollup": "^2.75.7" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /codemirror/rollup.config.js: -------------------------------------------------------------------------------- 1 | import {nodeResolve} from "@rollup/plugin-node-resolve" 2 | export default { 3 | input: "./editor.js", 4 | output: { 5 | file: "../docs/scripts/editor.bundle.js", 6 | format: "umd", 7 | name: "CodeMirrorWrapper", 8 | }, 9 | plugins: [nodeResolve()] 10 | } 11 | -------------------------------------------------------------------------------- /docs/assets.md: -------------------------------------------------------------------------------- 1 | # Assets 2 | 3 | Assets are usually referenced by [layers](layers.md) of the appropriate type. 4 | 5 |

Asset

6 | 7 | {schema_string:assets/asset/description} 8 | 9 | {schema_object:assets/asset} 10 | 11 | 12 | ### Image 13 | 14 | Represents a (static) image 15 | 16 | {schema_object:assets/image} 17 | 18 | If the image is embedded, `u` is empty and `p` contains a base64-encoded data url: 19 | 20 | ```json 21 | { 22 | "id": "my image", 23 | "h": 512, 24 | "w": 512, 25 | "e": 1, 26 | "u": "", 27 | "p": "data:image/png;base64,..." 28 | } 29 | ``` 30 | 31 | If the image is not embedded, 32 | `u` will contain the path to the directory containing the image 33 | and `p` will have the filename. 34 | 35 | So for example if you want to store the image at `/path/to/images/image.png`, 36 | the asset will look something like this: 37 | 38 | ```json 39 | { 40 | "id": "my image", 41 | "h": 512, 42 | "w": 512, 43 | "e": 0, 44 | "u": "/path/to/images/", 45 | "p": "image.png" 46 | } 47 | ``` 48 | 49 | It works similarly for external images. 50 | If you want to store the image at `https://example.com/images/image.png`, you'd have: 51 | 52 | ```json 53 | { 54 | "id": "my image", 55 | "h": 512, 56 | "w": 512, 57 | "e": 0, 58 | "u": "https://example.com/images/", 59 | "p": "image.png" 60 | } 61 | ``` 62 | 63 | ### Sound 64 | 65 | Similar to [Image](#image) but for audio files. 66 | 67 | {schema_object:assets/sound} 68 | 69 | 70 | ### Precomposition 71 | 72 | You can think of precompositions as self-contained animation within the 73 | main animation file that can be referenced using [precomp layers](layers.md#precomposition-layer). 74 | 75 | Within a precomposition you can have precomp layers showing other precompositions, 76 | as long as you don't create a dependency cycle. 77 | 78 | You can find more details in the [Precompositions](breakdown/precomps.md) page. 79 | 80 | {schema_object:assets/precomposition} 81 | 82 | Follows a rather extreme example, that uses precompositions inside precompositions to generate a fractal: 83 | 84 | {lottie src="static/examples/fractal.json"} 85 | 86 | 87 | ### Data Source 88 | 89 | Points to a JSON file for data. 90 | 91 | {schema_object:assets/data-source} 92 | -------------------------------------------------------------------------------- /docs/breakdown/images/builder/adding_shapes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/adding_shapes.png -------------------------------------------------------------------------------- /docs/breakdown/images/builder/animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/animation.png -------------------------------------------------------------------------------- /docs/breakdown/images/builder/animation_out_point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/animation_out_point.png -------------------------------------------------------------------------------- /docs/breakdown/images/builder/layer_out_point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/layer_out_point.png -------------------------------------------------------------------------------- /docs/breakdown/images/builder/more_props.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/more_props.png -------------------------------------------------------------------------------- /docs/breakdown/images/builder/setting_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/setting_up.png -------------------------------------------------------------------------------- /docs/breakdown/images/builder/setting_up.xml: -------------------------------------------------------------------------------- 1 | 60060512512FALSE4FALSEFALSEFALSE0600FALSEFALSE 2 | -------------------------------------------------------------------------------- /docs/breakdown/images/builder/shape_position.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/shape_position.png -------------------------------------------------------------------------------- /docs/breakdown/images/builder/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/star.png -------------------------------------------------------------------------------- /docs/compat.md: -------------------------------------------------------------------------------- 1 | # Compatibility with older versions 2 | 3 | This page describes breaking changes that have been introduced over time. 4 | 5 | You'd need to check `v` from {link:composition/animation} to see the 6 | the lottie is so old to need to worry about these. 7 | 8 | The code examples are just for illustrative purposes and are not to be 9 | taken as a complete conversion code. 10 | 11 | ## [0,255] Colors 12 | 13 | Until `v` 4.1.9. 14 | 15 | Modern Lotties have {link:values/color:color} components in the [0, 1] range. 16 | Older ones have components in the [0, 255] range. 17 | 18 | Fix: Divide all color components by 255. 19 | 20 | ## Static text document 21 | 22 | Until `v` 4.4.14. 23 | 24 | In {link:text/text-data}, `d` was not animated. 25 | 26 | Fix: Wrap into an animated property 27 | 28 | `text_layer.t.d = {"a": 0, "k": text_layer.t.d}` 29 | 30 | ## Shape closing 31 | 32 | Until `v` 4.4.18. 33 | 34 | {link:shapes/path} objects had a boolean `closed` property and `c` was not 35 | present in the bezier data. 36 | 37 | Similarly, {link:helpers/mask} had `cl` that worked the same way. 38 | 39 | Fix: For each {link:shapes/path}, update all the keyframes 40 | (or the non-animated value) of `ks`. 41 | Do the same to fix `pt` in each {link:helpers/mask}. 42 | 43 | `shape.ks.k.c = shape.closed ? 1 : 0` 44 | 45 | ## Old keyframe style 46 | 47 | Until `v` 5.0.0 (?). 48 | 49 | {link:properties/base-keyframe:Keyframes} had an `e` property that specified 50 | the end value for that keyframe (`s` marking the start value), 51 | and the last keyframe would not have `s`. 52 | 53 | Fix: Ignore all the `e` in keyframes, but copy the `e` from the keyframe 54 | before last into the last keyframe. 55 | 56 | `keyframes[keyframes.length - 1].s = keyframes[keyframes.length - 2].e` 57 | 58 | 59 | 60 | ## Static text layer properties 61 | 62 | Until `v` 5.7.15. 63 | 64 | In {link:text/text-follow-path} properties `r`, `a`, and `p` were 65 | plain numbers instead of animated properties. 66 | 67 | Fix: Wrap all of those into animated properties 68 | 69 | `text_layer.t.p.a + {"a": 0, "k": text_layer.t.p.a}` 70 | 71 | -------------------------------------------------------------------------------- /docs/composition.md: -------------------------------------------------------------------------------- 1 | # Animation 2 | 3 | This is the top-level JSON object, describing the document, layers, assets, etc. 4 | 5 | The size of the canvas is determined by `w` and `h`. Duration is expressed in frames with `op`, and the framerate is in `fr`. 6 | 7 | Most of the contents are in [`layers`](layers.md) and [`assets`](assets.md). 8 | 9 | {schema_object:composition/animation} 10 | 11 | 12 |

Composition

13 | 14 | {schema_string:composition/composition/description} 15 | 16 | {schema_object:composition/composition} 17 | 18 | 19 | ## Metadata 20 | 21 | Some (but not all) lottie files will have a metadata object describing the 22 | program used to create the file and other useful information: 23 | 24 | ### Document Metadata 25 | 26 | {schema_object:composition/metadata} 27 | 28 | ### User Metadata 29 | 30 | {schema_object:composition/user-metadata} 31 | 32 | ## Motion Blur 33 | 34 | {schema_object:composition/motion-blur} 35 | -------------------------------------------------------------------------------- /docs/schema.md: -------------------------------------------------------------------------------- 1 | disable_toc: 1 2 | 3 | # JSON Schema 4 | 5 | 6 | This page shows a formatted version of the JSON schema, you can click on highlighted 7 | objects to get a link to that section of the schema. You can also click on `$ref` 8 | values to jump to the relevant section. 9 | 10 | If you want you can also view the [raw schema file](lottie.schema.json). 11 | 12 | {json_file:lottie.schema.json} 13 | -------------------------------------------------------------------------------- /docs/scripts/explain_worker.js: -------------------------------------------------------------------------------- 1 | importScripts("lottie_explain.js"); 2 | 3 | var schema = null; 4 | 5 | function critical_error(err) 6 | { 7 | postMessage({type: "error", message: err}); 8 | } 9 | 10 | var requests = [ 11 | fetch("/lottie-docs/lottie.schema.json"), 12 | fetch("/lottie-docs/static/expressions.json") 13 | ] 14 | Promise.all(requests) 15 | .then(responses => { 16 | Promise.all(responses.map(r => r.json())) 17 | .then(jsons => { 18 | schema = new SchemaData(jsons[0], jsons[1]); 19 | postMessage({ 20 | type: "schema_loaded", 21 | schema: schema, 22 | expressions: jsons[1] 23 | }); 24 | }) 25 | .catch(critical_error); 26 | }) 27 | .catch(critical_error); 28 | 29 | function process_lottie(json) 30 | { 31 | if ( schema === null ) 32 | return; 33 | 34 | var validation = schema.root.validate(json); 35 | postMessage({ 36 | type: "result", 37 | result: validation, 38 | }); 39 | } 40 | 41 | onmessage = function(ev) 42 | { 43 | switch ( ev.data.type ) 44 | { 45 | case "update": 46 | process_lottie(ev.data.lottie); 47 | return; 48 | } 49 | }; 50 | -------------------------------------------------------------------------------- /docs/scripts/playground_data.js: -------------------------------------------------------------------------------- 1 | function playground_set_data(data) 2 | { 3 | localStorage.setItem("playground-open", JSON.stringify(data, undefined, 4)); 4 | } 5 | 6 | function playground_set_url(url) 7 | { 8 | localStorage.setItem("playground-open", url); 9 | } 10 | 11 | function playground_get_data() 12 | { 13 | var data = localStorage.getItem("playground-open"); 14 | localStorage.removeItem("playground-open"); 15 | if ( data ) 16 | return data; 17 | return null; 18 | } 19 | -------------------------------------------------------------------------------- /docs/static/examples/blep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/blep.png -------------------------------------------------------------------------------- /docs/static/examples/image.json: -------------------------------------------------------------------------------- 1 | { 2 | "v": "5.5.2", 3 | "fr": 60, 4 | "ip": 0, 5 | "op": 60, 6 | "w": 512, 7 | "h": 512, 8 | "ddd": 0, 9 | "assets": [ 10 | { 11 | "id": "blep", 12 | "h": 512, 13 | "w": 512, 14 | "p": "/lottie-docs/static/examples/blep.png", 15 | "u": "", 16 | "e": 0 17 | } 18 | ], 19 | "layers": [ 20 | { 21 | "nm": "foo", 22 | "mn": "bar", 23 | "ddd": 0, 24 | "ty": 2, 25 | "sr": 1, 26 | "ks": { 27 | "a": { 28 | "k": [ 29 | 256, 30 | 256 31 | ], 32 | "a": 0 33 | }, 34 | "p": { 35 | "k": [ 36 | 256, 37 | 256 38 | ], 39 | "a": 0 40 | }, 41 | "s": { 42 | "k": [ 43 | 100, 44 | 100 45 | ], 46 | "a": 0 47 | }, 48 | "r": { 49 | "k": 0, 50 | "a": 0 51 | }, 52 | "o": { 53 | "k": 100, 54 | "a": 0 55 | }, 56 | "sk": { 57 | "k": 0, 58 | "a": 0 59 | }, 60 | "sa": { 61 | "k": 0, 62 | "a": 0 63 | } 64 | }, 65 | "ao": 0, 66 | "ip": 0, 67 | "op": 60, 68 | "st": 0, 69 | "bm": 0, 70 | "ind": 0, 71 | "refId": "blep" 72 | } 73 | ] 74 | } 75 | -------------------------------------------------------------------------------- /docs/static/examples/layers-solid.json: -------------------------------------------------------------------------------- 1 | { 2 | "fr": 60, 3 | "ip": 0, 4 | "op": 60, 5 | "w": 512, 6 | "h": 512, 7 | "ddd": 0, 8 | "layers": [ 9 | { 10 | "ty": 1, 11 | "ip": 0, 12 | "op": 60, 13 | "st": 0, 14 | "ks": {}, 15 | "sc": "#ff0000", 16 | "sh": 512, 17 | "sw": 512 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /docs/static/examples/sound.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/sound.mp3 -------------------------------------------------------------------------------- /docs/static/examples/text-document.json: -------------------------------------------------------------------------------- 1 | { 2 | "v": "5.5.2", 3 | "fr": 60, 4 | "ip": 0, 5 | "op": 120, 6 | "w": 300, 7 | "h": 100, 8 | "ddd": 0, 9 | "assets": [], 10 | "fonts": { 11 | "list": [ 12 | { 13 | "fPath": "https://fonts.gstatic.com/s/ubuntu/v15/4iCp6KVjbNBYlgoKejZftWyI.ttf", 14 | "fFamily": "Ubuntu", 15 | "fStyle": "Light Italic", 16 | "fName": "Ubuntu Light Italic", 17 | "origin": 3 18 | } 19 | ] 20 | }, 21 | "layers": [ 22 | { 23 | "nm": "Text Layer", 24 | "ty": 5, 25 | "sr": 1, 26 | "ks": { 27 | "p": { 28 | "k": [ 29 | 5, 30 | 80 31 | ], 32 | "a": 0 33 | } 34 | }, 35 | "ip": 0, 36 | "op": 120, 37 | "st": 0, 38 | "t": { 39 | "a": [], 40 | "d": { 41 | "k": [ 42 | { 43 | "s": { 44 | "f": "Ubuntu Light Italic", 45 | "fc": [ 46 | 0, 47 | 0, 48 | 0 49 | ], 50 | "s": 100, 51 | "t": "Hello", 52 | "j": 0 53 | }, 54 | "t": 0 55 | } 56 | ] 57 | }, 58 | "m": { 59 | "a": { 60 | "k": [ 61 | 0, 62 | 0 63 | ], 64 | "a": 0 65 | } 66 | }, 67 | "p": {} 68 | } 69 | } 70 | ] 71 | } 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /docs/static/examples/text_shape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/text_shape.png -------------------------------------------------------------------------------- /docs/static/examples/thumbs-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/thumbs-up.png -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Lottie Docs 2 | site_description: Documentation for the Lottie animation format 3 | copyright: Copyright (C) 2021-2022 4 | extra: 5 | lottie_player_version: 5.12.2 6 | theme: 7 | name: cinder 8 | custom_dir: theme 9 | highlightjs: false 10 | repo_url: https://github.com/LottieFiles/lottie-docs 11 | edit_uri: https://github.com/LottieFiles/lottie-docs/edit/main/docs 12 | use_directory_urls: true 13 | site_url: https://lottiefiles.github.io/lottie-docs/ 14 | google_analytics: ['G-DNP7J0G3W8', 'lottiefiles.github.io'] 15 | markdown_extensions: 16 | - md_in_html 17 | - footnotes 18 | - attr_list 19 | - lottie_specs.markdown.lottie_markdown: 20 | docs_link_prefix: "" 21 | link_mapping: 22 | effect-values: effects 23 | styles: effects 24 | avoid_grabby_html: 25 | - lottie 26 | - lottie-playground 27 | - algorithm 28 | - shape_bezier_script 29 | - effect_shader_script 30 | - lottie_specs.markdown.latex_markdown 31 | - md_extensions 32 | extra_css: 33 | - /lottie-docs/style/style.css 34 | - /lottie-docs/style/lottie-theme.css 35 | plugins: 36 | - search 37 | - redirects: 38 | redirect_maps: 39 | "playground/explain.md": "playground/json_editor.md" 40 | "animation.md": "composition.md" 41 | "effect-values.md": "effects.md" 42 | "styles.md": "effects.md" 43 | 44 | nav: 45 | - "Home" : index.md 46 | - "Guide": 47 | - "Introduction" : Introduction.md 48 | - breakdown/bouncy_ball.md 49 | - breakdown/lottie_from_scratch.md 50 | - breakdown/bezier.md 51 | - breakdown/precomps.md 52 | - "Lottie Format": 53 | - values.md 54 | - properties.md 55 | - composition.md 56 | - layers.md 57 | - "Shapes": shapes.md 58 | - assets.md 59 | - helpers.md 60 | - effects.md 61 | - constants.md 62 | - text.md 63 | - expressions.md 64 | - compat.md 65 | - "Playground": 66 | - "Builder": playground/builder.md 67 | - "JSON Editor": playground/json_editor.md 68 | - "Advanced Concept": 69 | - rendering.md 70 | - schema.md 71 | - advanced_interactions.md 72 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs 2 | mkdocs-cinder 3 | mkdocs-redirects 4 | git+https://github.com/bmcorser/fontawesome-markdown.git@master 5 | lxml 6 | lottie_specs[docs] @ git+https://github.com/lottie/lottie-specs-python.git 7 | -------------------------------------------------------------------------------- /schema/assets/all-assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "oneOf": [ 4 | { 5 | "$ref": "#/$defs/assets/precomposition" 6 | }, 7 | { 8 | "$ref": "#/$defs/assets/image" 9 | }, 10 | { 11 | "$ref": "#/$defs/assets/data-source" 12 | }, 13 | { 14 | "$ref": "#/$defs/assets/sound" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /schema/assets/asset.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Asset", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/helpers/visual-object" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "id": { 13 | "title": "ID", 14 | "description": "Unique identifier used by layers when referencing this asset", 15 | "type": "string" 16 | } 17 | }, 18 | "required": ["id"] 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /schema/assets/data-source.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Data source", 5 | "description": "External data source, usually a JSON file", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/assets/file-asset" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "t": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 3 17 | } 18 | }, 19 | "required": ["t"] 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /schema/assets/file-asset.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "File Asset", 5 | "description": "Asset referencing a file", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/assets/asset" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "p": { 14 | "title": "File Name", 15 | "description": "Name of the asset file or a data url", 16 | "type": "string" 17 | }, 18 | "u": { 19 | "title": "File Path", 20 | "description": "Path to the asset file", 21 | "type": "string" 22 | }, 23 | "e": { 24 | "title": "Embedded", 25 | "description": "If '1', 'p' is a Data URL", 26 | "$ref": "#/$defs/values/int-boolean" 27 | } 28 | }, 29 | "if": { 30 | "properties": { 31 | "e": {"const": 1} 32 | }, 33 | "required": ["e"] 34 | }, 35 | "then": { 36 | "properties": { 37 | "p": {"$ref": "#/$defs/values/data-url"} 38 | } 39 | } 40 | } 41 | ] 42 | } 43 | 44 | 45 | -------------------------------------------------------------------------------- /schema/assets/image.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Image", 5 | "description": "Asset containing an image that can be referenced by layers.", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/assets/file-asset" 9 | }, 10 | { 11 | "$ref": "#/$defs/helpers/slottable-object" 12 | }, 13 | { 14 | "type": "object", 15 | "properties": { 16 | "w": { 17 | "title": "Width", 18 | "description": "Width of the image", 19 | "type": "number" 20 | }, 21 | "h": { 22 | "title": "Height", 23 | "description": "Height of the image", 24 | "type": "number" 25 | }, 26 | "t": { 27 | "title": "Type", 28 | "description": "Marks as part of an image sequence if present", 29 | "type": "string", 30 | "const": "seq" 31 | } 32 | }, 33 | "if": { 34 | "required": ["sid"] 35 | }, 36 | "else": { 37 | "required": ["w", "h", "p"] 38 | } 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /schema/assets/precomposition.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Precomposition", 5 | "description": "Asset containing a composition that can be referenced by layers.", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/assets/asset" 9 | }, 10 | { 11 | "$ref": "#/$defs/composition/composition" 12 | }, 13 | { 14 | "type": "object", 15 | "properties": { 16 | "fr": { 17 | "title": "Framerate", 18 | "description": "Framerate in frames per second", 19 | "type": "number" 20 | }, 21 | "xt": { 22 | "title": "Extra", 23 | "description": "Extra composition", 24 | "$ref": "#/$defs/values/int-boolean", 25 | "default": 0 26 | } 27 | } 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /schema/assets/sound.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Sound", 5 | "description": "External sound", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/assets/file-asset" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /schema/composition/composition.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Composition", 5 | "description": "An object that contains a list of layers", 6 | "properties": { 7 | "layers": { 8 | "title": "Layers", 9 | "type": "array", 10 | "items": { 11 | "$ref": "#/$defs/layers/all-layers" 12 | } 13 | } 14 | }, 15 | "required": ["layers"] 16 | } 17 | -------------------------------------------------------------------------------- /schema/composition/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Metadata", 5 | "description": "Document metadata", 6 | "properties": { 7 | "a": { 8 | "title": "Author", 9 | "type": "string" 10 | }, 11 | "d": { 12 | "title": "Description", 13 | "type": "string" 14 | }, 15 | "tc": { 16 | "title": "Theme Color", 17 | "type": "string" 18 | }, 19 | "g": { 20 | "title": "Generator", 21 | "description": "Software used to generate the file", 22 | "type": "string" 23 | } 24 | }, 25 | "anyOf": [ 26 | { 27 | "properties": { 28 | "k": { 29 | "title": "Keywords", 30 | "type": "array", 31 | "items": { 32 | "type": "string" 33 | } 34 | } 35 | } 36 | }, 37 | { 38 | "properties": { 39 | "k": { 40 | "title": "Keywords", 41 | "type": "string" 42 | } 43 | } 44 | } 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /schema/composition/motion-blur.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Motion Blur", 5 | "description": "Motion blur settings", 6 | "properties": { 7 | "sa": { 8 | "title": "Shutter Angle", 9 | "description": "Angle in degrees", 10 | "type": "number" 11 | }, 12 | "sp": { 13 | "title": "Shutter Phase", 14 | "description": "Angle in degrees", 15 | "type": "number" 16 | }, 17 | "spf": { 18 | "title": "Samples per Frame", 19 | "type": "number" 20 | }, 21 | "asl": { 22 | "title": "Adaptive Sample Limit", 23 | "type": "number" 24 | } 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /schema/composition/user-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "User Metadata", 5 | "description": "User-defined metadata", 6 | "properties": { 7 | "filename": { 8 | "title": "Filename", 9 | "type": "string" 10 | }, 11 | "customProps": { 12 | "title": "Custom Properties", 13 | "type": "object" 14 | } 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /schema/constants/blend-mode.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Blend Mode", 5 | "description": "Layer and shape blend mode", 6 | "oneOf": [ 7 | { 8 | "title": "Normal", 9 | "const": 0 10 | }, 11 | { 12 | "title": "Multiply", 13 | "const": 1 14 | }, 15 | { 16 | "title": "Screen", 17 | "const": 2 18 | }, 19 | { 20 | "title": "Overlay", 21 | "const": 3 22 | }, 23 | { 24 | "title": "Darken", 25 | "const": 4 26 | }, 27 | { 28 | "title": "Lighten", 29 | "const": 5 30 | }, 31 | { 32 | "title": "Color Dodge", 33 | "const": 6 34 | }, 35 | { 36 | "title": "Color Burn", 37 | "const": 7 38 | }, 39 | { 40 | "title": "Hard Light", 41 | "const": 8 42 | }, 43 | { 44 | "title": "Soft Light", 45 | "const": 9 46 | }, 47 | { 48 | "title": "Difference", 49 | "const": 10 50 | }, 51 | { 52 | "title": "Exclusion", 53 | "const": 11 54 | }, 55 | { 56 | "title": "Hue", 57 | "const": 12 58 | }, 59 | { 60 | "title": "Saturation", 61 | "const": 13 62 | }, 63 | { 64 | "title": "Color", 65 | "const": 14 66 | }, 67 | { 68 | "title": "Luminosity", 69 | "const": 15 70 | }, 71 | { 72 | "title": "Add", 73 | "const": 16 74 | }, 75 | { 76 | "title": "Hard Mix", 77 | "const": 17 78 | } 79 | ] 80 | } 81 | -------------------------------------------------------------------------------- /schema/constants/composite.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Composite", 5 | "description": "How to stack copies in a repeater", 6 | "oneOf": [ 7 | { 8 | "title": "Below", 9 | "description": "Subsequent copies are added underneath the previous ones.", 10 | "const": 1 11 | }, 12 | { 13 | "title": "Above", 14 | "description": "Subsequent copies are added on top of the previous ones.", 15 | "const": 2 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /schema/constants/fill-rule.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Fill Rule", 5 | "description": "Rule used to handle multiple shapes rendered with the same fill object", 6 | "oneOf": [ 7 | { 8 | "title": "Non Zero", 9 | "description": "Everything is colored (You can think of this as an OR)", 10 | "const": 1 11 | }, 12 | { 13 | "title": "Even Odd", 14 | "description": "Colored based on intersections and path direction, can be used to create \"holes\"", 15 | "const": 2 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /schema/constants/font-path-origin.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Font Path Origin", 5 | "description": "", 6 | "oneOf": [ 7 | { 8 | "title": "Local", 9 | "const": 0 10 | }, 11 | { 12 | "title": "Css Url", 13 | "const": 1 14 | }, 15 | { 16 | "title": "Script Url", 17 | "const": 2 18 | }, 19 | { 20 | "title": "Font Url", 21 | "const": 3 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/constants/gradient-type.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Gradient Type", 5 | "description": "Whether a Gradient is a linear or radial.", 6 | "oneOf": [ 7 | { 8 | "title": "Linear", 9 | "description": "Colors transition in a single linear direction.", 10 | "const": 1 11 | }, 12 | { 13 | "title": "Radial", 14 | "description": "Colors transition outward from a center point.", 15 | "const": 2 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /schema/constants/line-cap.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Line Cap", 5 | "description": "Style at the end of a stoked line", 6 | "oneOf": [ 7 | { 8 | "title": "Butt", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Round", 13 | "const": 2 14 | }, 15 | { 16 | "title": "Square", 17 | "const": 3 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /schema/constants/line-join.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Line Join", 5 | "description": "Style at a sharp corner of a stoked line", 6 | "oneOf": [ 7 | { 8 | "title": "Miter", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Round", 13 | "const": 2 14 | }, 15 | { 16 | "title": "Bevel", 17 | "const": 3 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /schema/constants/mask-mode.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "string", 4 | "title": "Mask Mode", 5 | "description": "Describes how a mask interacts (blends) with the preceding masks in the stack.", 6 | "oneOf": [ 7 | { 8 | "title": "None", 9 | "const": "n", 10 | "description": "The mask is ignored." 11 | }, 12 | { 13 | "title": "Add", 14 | "const": "a", 15 | "description": "Mask coverage is added (Normal blending)." 16 | }, 17 | { 18 | "title": "Subtract", 19 | "const": "s", 20 | "description": "Mask coverage is subtracted (Subtract blending)." 21 | }, 22 | { 23 | "title": "Intersect", 24 | "const": "i", 25 | "description": "Mask coverage is intersected (Source-In blending)." 26 | }, 27 | { 28 | "title": "Lighten", 29 | "const": "l" 30 | }, 31 | { 32 | "title": "Darken", 33 | "const": "d" 34 | }, 35 | { 36 | "title": "Difference", 37 | "const": "f" 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /schema/constants/matte-mode.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Matte Mode", 5 | "description": "How a layer should mask another layer", 6 | "oneOf": [ 7 | { 8 | "title": "Normal", 9 | "description": "The layer is not used as a track matte", 10 | "const": 0 11 | }, 12 | { 13 | "title": "Alpha", 14 | "description": "The masked layer opacity is modulated by the track matte layer opacity", 15 | "const": 1 16 | }, 17 | { 18 | "title": "Inverted Alpha", 19 | "description": "The masked layer opacity is modulated by the inverted track matte layer opacity", 20 | "const": 2 21 | }, 22 | { 23 | "title": "Luma", 24 | "description": "The masked layer opacity is modulated by the track matte layer luminance", 25 | "const": 3 26 | }, 27 | { 28 | "title": "Inverted Luma", 29 | "description": "The masked layer opacity is modulated by the inverted track matte layer luminance", 30 | "const": 4 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /schema/constants/merge-mode.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Merge Mode", 5 | "description": "Boolean operation on shapes", 6 | "oneOf": [ 7 | { 8 | "title": "Normal", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Add", 13 | "const": 2 14 | }, 15 | { 16 | "title": "Subtract", 17 | "const": 3 18 | }, 19 | { 20 | "title": "Intersect", 21 | "const": 4 22 | }, 23 | { 24 | "title": "Exclude Intersections", 25 | "const": 5 26 | } 27 | ] 28 | } 29 | 30 | -------------------------------------------------------------------------------- /schema/constants/shape-direction.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Shape Direction", 5 | "description": "Drawing direction of the shape curve, useful for trim path", 6 | "oneOf": [ 7 | { 8 | "title": "Normal", 9 | "description": "Usually clockwise", 10 | "const": 1 11 | }, 12 | { 13 | "title": "Reversed", 14 | "description": "Usually counter clockwise", 15 | "const": 3 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /schema/constants/star-type.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Star Type", 5 | "description": "Whether a PolyStar is a star or a polygon", 6 | "oneOf": [ 7 | { 8 | "title": "Star", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Polygon", 13 | "const": 2 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /schema/constants/stroke-dash-type.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "string", 4 | "title": "Stroke Dash Type", 5 | "description": "Type of a dash item in a stroked line", 6 | "oneOf": [ 7 | { 8 | "title": "Dash", 9 | "const": "d" 10 | }, 11 | { 12 | "title": "Gap", 13 | "const": "g" 14 | }, 15 | { 16 | "title": "Offset", 17 | "const": "o" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /schema/constants/text-based.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Text Based", 5 | "description": "", 6 | "oneOf": [ 7 | { 8 | "title": "Characters", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Character Excluding Spaces", 13 | "const": 2 14 | }, 15 | { 16 | "title": "Words", 17 | "const": 3 18 | }, 19 | { 20 | "title": "Lines", 21 | "const": 4 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/constants/text-caps.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Text Caps", 5 | "oneOf": [ 6 | { 7 | "title": "Regular", 8 | "const": 0 9 | }, 10 | { 11 | "title": "All Caps", 12 | "const": 1 13 | }, 14 | { 15 | "title": "Small Caps", 16 | "const": 2 17 | } 18 | ], 19 | "default": 0 20 | } 21 | -------------------------------------------------------------------------------- /schema/constants/text-grouping.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Text Grouping", 5 | "description": "", 6 | "oneOf": [ 7 | { 8 | "title": "Characters", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Word", 13 | "const": 2 14 | }, 15 | { 16 | "title": "Line", 17 | "const": 3 18 | }, 19 | { 20 | "title": "All", 21 | "const": 4 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/constants/text-justify.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Text Justify", 5 | "description": "Text alignment / justification", 6 | "oneOf": [ 7 | { 8 | "title": "Left", 9 | "const": 0 10 | }, 11 | { 12 | "title": "Right", 13 | "const": 1 14 | }, 15 | { 16 | "title": "Center", 17 | "const": 2 18 | }, 19 | { 20 | "title": "Justify with Last Line Left", 21 | "const": 3 22 | }, 23 | { 24 | "title": "Justify with Last Line Right", 25 | "const": 4 26 | }, 27 | { 28 | "title": "Justify with Last Line Center", 29 | "const": 5 30 | }, 31 | { 32 | "title": "Justify with Last Line Full", 33 | "const": 6 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /schema/constants/text-range-units.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Text Range Units", 5 | "description": "Unit type for a text selector", 6 | "oneOf": [ 7 | { 8 | "title": "Percent", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Index", 13 | "const": 2 14 | } 15 | ] 16 | } 17 | 18 | -------------------------------------------------------------------------------- /schema/constants/text-shape.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Text Shape", 5 | "description": "Defines the function used to determine the interpolating factor on a text range selector.", 6 | "oneOf": [ 7 | { 8 | "title": "Square", 9 | "const": 1 10 | }, 11 | { 12 | "title": "Ramp Up", 13 | "const": 2 14 | }, 15 | { 16 | "title": "Ramp Down", 17 | "const": 3 18 | }, 19 | { 20 | "title": "Triangle", 21 | "const": 4 22 | }, 23 | { 24 | "title": "Round", 25 | "const": 5 26 | }, 27 | { 28 | "title": "Smooth", 29 | "const": 6 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /schema/constants/trim-multiple-shapes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Trim Multiple Shapes", 5 | "description": "How to handle multiple shapes in trim path", 6 | "oneOf": [ 7 | { 8 | "title": "Parallel", 9 | "description": "All shapes apply the trim at the same time", 10 | "const": 1 11 | }, 12 | { 13 | "title": "Sequential", 14 | "description": "Shapes are considered as a continuous sequence", 15 | "const": 2 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /schema/effect-values/all-effect-values.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "oneOf": [ 4 | {"$ref": "#/$defs/effect-values/angle"}, 5 | {"$ref": "#/$defs/effect-values/checkbox"}, 6 | {"$ref": "#/$defs/effect-values/color"}, 7 | {"$ref": "#/$defs/effect-values/drop-down"}, 8 | {"$ref": "#/$defs/effect-values/ignored"}, 9 | {"$ref": "#/$defs/effect-values/layer"}, 10 | {"$ref": "#/$defs/effect-values/no-value"}, 11 | {"$ref": "#/$defs/effect-values/point"}, 12 | {"$ref": "#/$defs/effect-values/slider"} 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /schema/effect-values/angle.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value Angle", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 1 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty" 25 | ] 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /schema/effect-values/checkbox.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value Checkbox", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 4 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty" 25 | ] 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /schema/effect-values/color.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value Color", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 2 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "$ref": "#/$defs/properties/color-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty" 25 | ] 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /schema/effect-values/drop-down.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value Drop Down", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 7 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty" 25 | ] 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /schema/effect-values/effect-value.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value", 5 | "description": "Value for an effect", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/helpers/visual-object" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ix": { 14 | "title": "Effect Index", 15 | "type": "integer" 16 | }, 17 | "ty": { 18 | "title": "Type", 19 | "type": "integer" 20 | } 21 | }, 22 | "required": [] 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /schema/effect-values/ignored.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Ignored Value", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 6 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "type": "number", 21 | "default": 0 22 | } 23 | }, 24 | "required": [ 25 | "ty" 26 | ] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /schema/effect-values/layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value Layer", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 10 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty" 25 | ] 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /schema/effect-values/no-value.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect No Value", 5 | "description": "" 6 | } 7 | -------------------------------------------------------------------------------- /schema/effect-values/point.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value Point", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 3 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "$ref": "#/$defs/properties/vector-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty" 25 | ] 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /schema/effect-values/slider.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect Value Slider", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effect-values/effect-value" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 0 17 | }, 18 | "v": { 19 | "title": "Value", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty" 25 | ] 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /schema/effects/all-effects.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "oneOf": [ 4 | {"$ref": "#/$defs/effects/custom-effect"}, 5 | {"$ref": "#/$defs/effects/displacement-map-effect"}, 6 | {"$ref": "#/$defs/effects/drop-shadow-effect"}, 7 | {"$ref": "#/$defs/effects/effect"}, 8 | {"$ref": "#/$defs/effects/fill-effect"}, 9 | {"$ref": "#/$defs/effects/gaussian-blur-effect"}, 10 | {"$ref": "#/$defs/effects/matte3-effect"}, 11 | {"$ref": "#/$defs/effects/mesh-warp-effect"}, 12 | {"$ref": "#/$defs/effects/pro-levels-effect"}, 13 | {"$ref": "#/$defs/effects/puppet-effect"}, 14 | {"$ref": "#/$defs/effects/radial-wipe-effect"}, 15 | {"$ref": "#/$defs/effects/spherize-effect"}, 16 | {"$ref": "#/$defs/effects/stroke-effect"}, 17 | {"$ref": "#/$defs/effects/tint-effect"}, 18 | {"$ref": "#/$defs/effects/tritone-effect"}, 19 | {"$ref": "#/$defs/effects/twirl-effect"}, 20 | {"$ref": "#/$defs/effects/wavy-effect"} 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /schema/effects/custom-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Custom Effect", 5 | "description": "Some lottie files use `ty` = 5 for many different effects", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 5 17 | } 18 | }, 19 | "required": [ 20 | "ty" 21 | ] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/effects/displacement-map-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Displacement Map Effect", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 27 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "Displacement Map Layer", 24 | "$ref": "#/$defs/effect-values/layer" 25 | }, 26 | { 27 | "title": "Use For Horizontal Displacement", 28 | "$ref": "#/$defs/effect-values/drop-down" 29 | }, 30 | { 31 | "title": "Max Horizontal Displacement", 32 | "$ref": "#/$defs/effect-values/slider" 33 | }, 34 | { 35 | "title": "Use For Vertical Displacement", 36 | "$ref": "#/$defs/effect-values/drop-down" 37 | }, 38 | { 39 | "title": "Max Vertical Displacement", 40 | "$ref": "#/$defs/effect-values/slider" 41 | }, 42 | { 43 | "title": "Displacement Map Behavior", 44 | "$ref": "#/$defs/effect-values/drop-down" 45 | }, 46 | { 47 | "title": "Edge Behavior", 48 | "$ref": "#/$defs/effect-values/drop-down" 49 | }, 50 | { 51 | "title": "Expand Output", 52 | "$ref": "#/$defs/effect-values/drop-down" 53 | } 54 | ] 55 | } 56 | }, 57 | "required": [ 58 | "ty", 59 | "ef" 60 | ] 61 | } 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /schema/effects/drop-shadow-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Drop Shadow Effect", 5 | "description": "Adds a shadow to the layer", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 25 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "color", 24 | "$ref": "#/$defs/effect-values/color" 25 | }, 26 | { 27 | "title": "opacity", 28 | "description": "Opacity between 0 and 255", 29 | "$ref": "#/$defs/effect-values/slider" 30 | }, 31 | { 32 | "title": "angle", 33 | "$ref": "#/$defs/effect-values/angle" 34 | }, 35 | { 36 | "title": "distance", 37 | "$ref": "#/$defs/effect-values/slider" 38 | }, 39 | { 40 | "title": "blur", 41 | "$ref": "#/$defs/effect-values/slider" 42 | } 43 | ] 44 | } 45 | }, 46 | "required": [ 47 | "ty" 48 | ] 49 | } 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /schema/effects/effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Effect", 5 | "description": "Layer effect", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/helpers/visual-object" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ef": { 14 | "title": "Effect Values", 15 | "type": "array", 16 | "items": { 17 | "oneOf": [ 18 | {"$ref": "#/$defs/effect-values/no-value"}, 19 | {"$ref": "#/$defs/effect-values/angle"}, 20 | {"$ref": "#/$defs/effect-values/checkbox"}, 21 | {"$ref": "#/$defs/effect-values/color"}, 22 | {"$ref": "#/$defs/effect-values/drop-down"}, 23 | {"$ref": "#/$defs/effect-values/ignored"}, 24 | {"$ref": "#/$defs/effect-values/layer"}, 25 | {"$ref": "#/$defs/effect-values/point"}, 26 | {"$ref": "#/$defs/effect-values/slider"} 27 | ] 28 | } 29 | }, 30 | "np": { 31 | "title": "Property Count", 32 | "description": "Number of values in `ef`", 33 | "type": "integer" 34 | }, 35 | "ix": { 36 | "title": "Effect Index", 37 | "type": "integer" 38 | }, 39 | "ty": { 40 | "title": "Type", 41 | "description": "Effect type", 42 | "type": "integer" 43 | }, 44 | "en": { 45 | "title": "Enabled", 46 | "$ref": "#/$defs/values/int-boolean", 47 | "default": 1 48 | } 49 | }, 50 | "required": ["ty", "ef"] 51 | } 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /schema/effects/fill-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Fill Effect", 5 | "description": "Replaces the whole layer with the given color", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 21 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "10", 24 | "$ref": "#/$defs/effect-values/layer" 25 | }, 26 | { 27 | "title": "01", 28 | "$ref": "#/$defs/effect-values/drop-down" 29 | }, 30 | { 31 | "title": "color", 32 | "$ref": "#/$defs/effect-values/color" 33 | }, 34 | { 35 | "title": "03", 36 | "$ref": "#/$defs/effect-values/drop-down" 37 | }, 38 | { 39 | "title": "04", 40 | "$ref": "#/$defs/effect-values/slider" 41 | }, 42 | { 43 | "title": "05", 44 | "$ref": "#/$defs/effect-values/slider" 45 | }, 46 | { 47 | "title": "opacity", 48 | "description": "Opacity in [0, 1]", 49 | "$ref": "#/$defs/effect-values/slider" 50 | } 51 | ] 52 | } 53 | }, 54 | "required": [ 55 | "ty" 56 | ] 57 | } 58 | ] 59 | } 60 | -------------------------------------------------------------------------------- /schema/effects/gaussian-blur-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Gaussian Blur Effect", 5 | "description": "Gaussian blur", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 29 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "sigma", 24 | "$ref": "#/$defs/effect-values/slider" 25 | }, 26 | { 27 | "title": "direction", 28 | "$ref": "#/$defs/effect-values/slider" 29 | }, 30 | { 31 | "title": "wrap", 32 | "$ref": "#/$defs/effect-values/checkbox" 33 | } 34 | ] 35 | } 36 | }, 37 | "required": [ 38 | "ty" 39 | ] 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /schema/effects/matte3-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Set Matte Effect", 5 | "description": "Uses a layer as a mask", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 28 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "Layer", 24 | "description": "Use this layer as a mask", 25 | "$ref": "#/$defs/effect-values/layer" 26 | }, 27 | { 28 | "title": "Channel", 29 | "description": "Channel to use as a mask:\n1 - Red\n2 - Green\n3 - Blue\n4 - Alpha\n5 - Luminance\n6 - Hue\n7 - Lightness\n8 - Saturation\n9 - Full\n10 - Off", 30 | "$ref": "#/$defs/effect-values/drop-down" 31 | }, 32 | { 33 | "title": "Invert", 34 | "description": "Use 0 as opaque value when true", 35 | "$ref": "#/$defs/effect-values/drop-down" 36 | }, 37 | { 38 | "title": "Stretch To Fit", 39 | "$ref": "#/$defs/effect-values/drop-down" 40 | }, 41 | { 42 | "title": "Show Mask", 43 | "description": "If false, the mask layer won't be shown", 44 | "$ref": "#/$defs/effect-values/drop-down" 45 | }, 46 | { 47 | "title": "Premultiply Mask", 48 | "$ref": "#/$defs/effect-values/drop-down" 49 | } 50 | ] 51 | } 52 | }, 53 | "required": [ 54 | "ty" 55 | ] 56 | } 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /schema/effects/mesh-warp-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Mesh Warp Effect", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 31 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "Rows", 24 | "$ref": "#/$defs/effect-values/slider" 25 | }, 26 | { 27 | "title": "Columns", 28 | "$ref": "#/$defs/effect-values/slider" 29 | }, 30 | { 31 | "title": "Quality", 32 | "$ref": "#/$defs/effect-values/slider" 33 | }, 34 | { 35 | "title": "03", 36 | "$ref": "#/$defs/effect-values/no-value" 37 | } 38 | ] 39 | } 40 | }, 41 | "required": [ 42 | "ty", 43 | "ef" 44 | ] 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /schema/effects/puppet-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Puppet Effect", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 34 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "Puppet Engine", 24 | "$ref": "#/$defs/effect-values/drop-down" 25 | }, 26 | { 27 | "title": "Mesh Rotation Refinement", 28 | "$ref": "#/$defs/effect-values/slider" 29 | }, 30 | { 31 | "title": "On Transparent", 32 | "$ref": "#/$defs/effect-values/drop-down" 33 | }, 34 | { 35 | "title": "03", 36 | "$ref": "#/$defs/effect-values/no-value" 37 | } 38 | ] 39 | } 40 | }, 41 | "required": [ 42 | "ty", 43 | "ef" 44 | ] 45 | } 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /schema/effects/radial-wipe-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Radial Wipe", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/effects/effect" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "type": "integer", 15 | "const": 26 16 | }, 17 | "ef": { 18 | "title": "Effect values", 19 | "type": "array", 20 | "prefixItems": [ 21 | { 22 | "title": "Completion", 23 | "description": "Between 0 and 100", 24 | "$ref": "#/$defs/effect-values/slider" 25 | }, 26 | { 27 | "title": "Start Angle", 28 | "$ref": "#/$defs/effect-values/angle" 29 | }, 30 | { 31 | "title": "Wipe Center", 32 | "$ref": "#/$defs/effect-values/point" 33 | }, 34 | { 35 | "title": "Wipe", 36 | "$ref": "#/$defs/effect-values/slider" 37 | }, 38 | { 39 | "title": "Feather", 40 | "$ref": "#/$defs/effect-values/slider" 41 | } 42 | ] 43 | } 44 | }, 45 | "required": [ 46 | "ty" 47 | ] 48 | } 49 | ] 50 | } 51 | 52 | -------------------------------------------------------------------------------- /schema/effects/spherize-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Spherize Effect", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 33 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "radius", 24 | "$ref": "#/$defs/effect-values/slider" 25 | }, 26 | { 27 | "title": "center", 28 | "$ref": "#/$defs/effect-values/point" 29 | } 30 | ] 31 | } 32 | }, 33 | "required": [ 34 | "ty" 35 | ] 36 | } 37 | ] 38 | } 39 | 40 | -------------------------------------------------------------------------------- /schema/effects/tint-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Tint Effect", 5 | "description": "Colorizes the layer", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 20 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "Black Color", 24 | "description": "Tint of the darker parts of the layer", 25 | "$ref": "#/$defs/effect-values/color" 26 | }, 27 | { 28 | "title": "White Color", 29 | "description": "Tint of the lighter parts of the layer", 30 | "$ref": "#/$defs/effect-values/color" 31 | }, 32 | { 33 | "title": "Intensity", 34 | "description": "Intensity of the effect, 0 means the layer is unchanged. 100 means full effect", 35 | "$ref": "#/$defs/effect-values/slider" 36 | } 37 | ] 38 | } 39 | }, 40 | "required": [ 41 | "ty" 42 | ] 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /schema/effects/tritone-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Tritone Effect", 5 | "description": "Maps layers colors based on bright/mid/dark colors", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 23 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "bright", 24 | "$ref": "#/$defs/effect-values/color" 25 | }, 26 | { 27 | "title": "mid", 28 | "$ref": "#/$defs/effect-values/color" 29 | }, 30 | { 31 | "title": "dark", 32 | "$ref": "#/$defs/effect-values/color" 33 | } 34 | ] 35 | } 36 | }, 37 | "required": [ 38 | "ty" 39 | ] 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /schema/effects/twirl-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Twirl Effect", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 30 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "Angle", 24 | "$ref": "#/$defs/effect-values/angle" 25 | }, 26 | { 27 | "title": "Radius", 28 | "$ref": "#/$defs/effect-values/slider" 29 | }, 30 | { 31 | "title": "Center", 32 | "$ref": "#/$defs/effect-values/point" 33 | } 34 | ] 35 | } 36 | }, 37 | "required": [ 38 | "ty", 39 | "ef" 40 | ] 41 | } 42 | ] 43 | } 44 | 45 | -------------------------------------------------------------------------------- /schema/effects/wavy-effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Wavy Effect", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/effects/effect" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "type": "integer", 16 | "const": 32 17 | }, 18 | "ef": { 19 | "title": "Effect values", 20 | "type": "array", 21 | "prefixItems": [ 22 | { 23 | "title": "Radius", 24 | "$ref": "#/$defs/effect-values/slider" 25 | }, 26 | { 27 | "title": "Center", 28 | "$ref": "#/$defs/effect-values/point" 29 | }, 30 | { 31 | "title": "Conversion type", 32 | "$ref": "#/$defs/effect-values/drop-down" 33 | }, 34 | { 35 | "title": "Speed", 36 | "$ref": "#/$defs/effect-values/drop-down" 37 | }, 38 | { 39 | "title": "Width", 40 | "$ref": "#/$defs/effect-values/slider" 41 | }, 42 | { 43 | "title": "Height", 44 | "$ref": "#/$defs/effect-values/slider" 45 | }, 46 | { 47 | "title": "Phase", 48 | "$ref": "#/$defs/effect-values/slider" 49 | } 50 | ] 51 | } 52 | }, 53 | "required": [ 54 | "ty", 55 | "ef" 56 | ] 57 | } 58 | ] 59 | } 60 | -------------------------------------------------------------------------------- /schema/helpers/marker.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Marker", 5 | "description": "Defines named portions of the composition.", 6 | "properties": { 7 | "cm": { 8 | "title": "Comment", 9 | "type": "string" 10 | }, 11 | "tm": { 12 | "title": "Time", 13 | "type": "number" 14 | }, 15 | "dr": { 16 | "title": "Duration", 17 | "type": "number" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /schema/helpers/mask.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Mask", 5 | "description": "Mask for layer content.", 6 | "allOf": [ 7 | { 8 | "properties": { 9 | "mode": { 10 | "title": "Mode", 11 | "$ref": "#/$defs/constants/mask-mode", 12 | "default": "i" 13 | }, 14 | "o": { 15 | "title": "Opacity", 16 | "description": "Mask opacity, as a percentage [0..100].", 17 | "$ref": "#/$defs/properties/scalar-property", 18 | "default": 100 19 | }, 20 | "pt": { 21 | "title": "Shape", 22 | "description": "Mask shape", 23 | "$ref": "#/$defs/properties/bezier-property" 24 | }, 25 | "x": { 26 | "title": "Expand", 27 | "$ref": "#/$defs/properties/scalar-property" 28 | }, 29 | "inv": { 30 | "title": "Inverted", 31 | "type": "boolean", 32 | "default": false 33 | } 34 | }, 35 | "required": [ 36 | "pt" 37 | ] 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /schema/helpers/slot.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Slot", 5 | "description": "Defines a property value that will be set to all matched properties", 6 | "properties": { 7 | "p": { 8 | "title": "Property Value", 9 | "description": "Property Value" 10 | } 11 | }, 12 | "required": ["p"] 13 | } 14 | -------------------------------------------------------------------------------- /schema/helpers/slottable-object.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Slottable Object", 5 | "description": "Object that may have its value replaced with a slot value", 6 | "properties": { 7 | "sid": { 8 | "title": "Slot Id", 9 | "description": "Identifier to look up the slot", 10 | "type": "string" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /schema/helpers/visual-object.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Visual Object", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "nm": { 11 | "title": "Name", 12 | "description": "Human readable name, as seen from editors and the like", 13 | "type": "string" 14 | }, 15 | "mn": { 16 | "title": "Match Name", 17 | "description": "Match name, used in expressions", 18 | "type": "string" 19 | } 20 | }, 21 | "required": [] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/layers/all-layers.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "oneOf": [ 4 | {"$ref": "#/$defs/layers/precomposition-layer"}, 5 | {"$ref": "#/$defs/layers/solid-layer"}, 6 | {"$ref": "#/$defs/layers/image-layer"}, 7 | {"$ref": "#/$defs/layers/null-layer"}, 8 | {"$ref": "#/$defs/layers/shape-layer"}, 9 | {"$ref": "#/$defs/layers/text-layer"}, 10 | {"$ref": "#/$defs/layers/audio-layer"}, 11 | {"$ref": "#/$defs/layers/data-layer"}, 12 | {"$ref": "#/$defs/layers/camera-layer"}, 13 | {"$ref": "#/$defs/layers/unknown-layer"} 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /schema/layers/audio-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Audio Layer", 5 | "description": "A layer playing sounds", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 6 18 | }, 19 | "au": { 20 | "title": "Audio Settings", 21 | "$ref": "#/$defs/layers/audio-settings" 22 | }, 23 | "refId": { 24 | "title": "Sound Id", 25 | "description": "ID of the sound as specified in the assets", 26 | "type": "string" 27 | } 28 | }, 29 | "required": [ 30 | "ty", "au" 31 | ] 32 | } 33 | ] 34 | } 35 | 36 | -------------------------------------------------------------------------------- /schema/layers/audio-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Audio Settings", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "lv": { 11 | "title": "Level", 12 | "$ref": "#/$defs/properties/vector-property" 13 | } 14 | }, 15 | "required": [ 16 | "lv" 17 | ] 18 | } 19 | ] 20 | } 21 | 22 | 23 | -------------------------------------------------------------------------------- /schema/layers/camera-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Camera Layer", 5 | "description": "3D Camera", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 13 18 | }, 19 | "ks": { 20 | "title": "Transform", 21 | "description": "Layer transform", 22 | "$ref": "#/$defs/helpers/transform" 23 | }, 24 | "pe": { 25 | "title": "Perspective", 26 | "description": "Distance from the Z=0 plane.\nSmall values yield a higher perspective effect.", 27 | "$ref": "#/$defs/properties/scalar-property" 28 | } 29 | }, 30 | "required": [ 31 | "ty", "ks", "pe" 32 | ] 33 | } 34 | ] 35 | } 36 | 37 | 38 | -------------------------------------------------------------------------------- /schema/layers/data-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Data Layer", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/layers/layer" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer type", 15 | "type": "integer", 16 | "const": 15 17 | }, 18 | "refId": { 19 | "title": "Data source Id", 20 | "description": "ID of the data source in assets", 21 | "type": "string" 22 | } 23 | }, 24 | "required": [ 25 | "ty" 26 | ] 27 | } 28 | ] 29 | } 30 | 31 | -------------------------------------------------------------------------------- /schema/layers/image-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Image Layer", 5 | "description": "Layer containing an image", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/visual-layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 2 18 | }, 19 | "refId": { 20 | "title": "Reference Id", 21 | "description": "ID of the image as specified in the assets", 22 | "type": "string" 23 | } 24 | }, 25 | "required": [ 26 | "ty", 27 | "refId" 28 | ] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /schema/layers/layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Layer", 5 | "description": "Common properties for all layers", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/helpers/visual-object" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ddd": { 14 | "title": "Threedimensional", 15 | "description": "Whether the layer is threedimensional", 16 | "$ref": "#/$defs/values/int-boolean", 17 | "default": 0 18 | }, 19 | "hd": { 20 | "title": "Hidden", 21 | "description": "Whether the layer is hidden", 22 | "type": "boolean" 23 | }, 24 | "ty": { 25 | "title": "Type", 26 | "description": "Layer Type", 27 | "type": "integer" 28 | }, 29 | "ind": { 30 | "title": "Index", 31 | "type": "integer", 32 | "description": "Index that can be used for parenting and referenced in expressions" 33 | }, 34 | "parent": { 35 | "title": "Parent Index", 36 | "description": "Must be the `ind` property of another layer", 37 | "type": "integer" 38 | }, 39 | "sr": { 40 | "title": "Time Stretch", 41 | "type": "number", 42 | "default": 1 43 | }, 44 | "ip": { 45 | "title": "In Point", 46 | "description": "Frame when the layer becomes visible", 47 | "type": "number" 48 | }, 49 | "op": { 50 | "title": "Out Point", 51 | "description": "Frame when the layer becomes invisible", 52 | "type": "number" 53 | }, 54 | "st": { 55 | "title": "Start Time", 56 | "type": "number", 57 | "default": 0 58 | } 59 | }, 60 | "required": ["ty", "ip", "op"] 61 | } 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /schema/layers/null-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Null Layer", 5 | "description": "Layer with no data, useful to group layers together", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/visual-layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 3 18 | } 19 | }, 20 | "required": [ 21 | "ty" 22 | ] 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /schema/layers/precomposition-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Precomposition Layer", 5 | "description": "Layer that renders a Precomposition asset", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/visual-layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 0 18 | }, 19 | "refId": { 20 | "title": "Reference Id", 21 | "description": "ID of the precomp as specified in the assets", 22 | "type": "string" 23 | }, 24 | "w": { 25 | "title": "Width", 26 | "description": "Width of the clipping rect", 27 | "type": "integer" 28 | }, 29 | "h": { 30 | "title": "Height", 31 | "description": "Height of the clipping rect", 32 | "type": "integer" 33 | }, 34 | "st": { 35 | "title": "Start Time", 36 | "type": "number", 37 | "default": 0 38 | }, 39 | "tm": { 40 | "title": "Time Remap", 41 | "description": "Timeline remap function (frame index -> time in seconds)", 42 | "$ref": "#/$defs/properties/scalar-property" 43 | } 44 | }, 45 | "required": [ 46 | "ty", "refId" 47 | ] 48 | } 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /schema/layers/shape-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Shape Layer", 5 | "description": "Layer containing Shapes", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/visual-layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 4 18 | }, 19 | "shapes": { 20 | "title": "Shapes", 21 | "type": "array", 22 | "items": { 23 | "$ref": "#/$defs/shapes/all-graphic-elements" 24 | } 25 | } 26 | }, 27 | "required": [ 28 | "ty", "shapes" 29 | ] 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /schema/layers/solid-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Solid Layer", 5 | "description": "Solid color, rectangle-shaped layer", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/visual-layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 1 18 | }, 19 | "sw": { 20 | "title": "Width", 21 | "description": "Solid rectangle width", 22 | "type": "integer" 23 | }, 24 | "sh": { 25 | "title": "Height", 26 | "description": "Solid rectangle height", 27 | "type": "integer" 28 | }, 29 | "sc": { 30 | "title": "Color", 31 | "description": "Solid fill color", 32 | "$ref": "#/$defs/values/hexcolor" 33 | } 34 | }, 35 | "required": [ 36 | "ty", 37 | "sw", 38 | "sh", 39 | "sc" 40 | ] 41 | } 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /schema/layers/text-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Text Layer", 5 | "description": "Layer with some text", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/layers/visual-layer" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer type", 16 | "type": "integer", 17 | "const": 5 18 | }, 19 | "t": { 20 | "title": "Data", 21 | "$ref": "#/$defs/text/text-data" 22 | } 23 | }, 24 | "required": [ 25 | "ty", "t" 26 | ] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /schema/layers/unknown-layer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Unknown layer types", 5 | "description": "Unknown layer types. Types not defined by the specification are still allowed.", 6 | "properties": { 7 | "ty": { 8 | "not": { 9 | "$comment": "enum list is dynamically generated", 10 | "enum": [] 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /schema/properties/base-keyframe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Base Keyframe", 5 | "description": "A Keyframes specifies the value at a specific time and the interpolation function to reach the next keyframe.", 6 | "allOf": [ 7 | { 8 | "properties": { 9 | "t": { 10 | "title": "Time", 11 | "description": "Frame number", 12 | "type": "number", 13 | "default": 0 14 | }, 15 | "h": { 16 | "title": "Hold", 17 | "$ref": "#/$defs/values/int-boolean", 18 | "default": 0 19 | }, 20 | "i": { 21 | "title": "In Tangent", 22 | "description": "Easing tangent going into the next keyframe", 23 | "$ref": "#/$defs/properties/easing-handle" 24 | }, 25 | "o": { 26 | "title": "Out Tangent", 27 | "description": "Easing tangent leaving the current keyframe", 28 | "$ref": "#/$defs/properties/easing-handle" 29 | } 30 | } 31 | } 32 | ], 33 | "required": ["t"] 34 | } 35 | 36 | -------------------------------------------------------------------------------- /schema/properties/bezier-keyframe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Shape Keyframe", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/properties/base-keyframe" 8 | }, 9 | { 10 | "properties": { 11 | "s": { 12 | "title": "Value", 13 | "description": "Value at this keyframe.", 14 | "type": "array", 15 | "items": { 16 | "$ref": "#/$defs/values/bezier" 17 | }, 18 | "minItems": 1, 19 | "maxItems": 1 20 | }, 21 | "e": { 22 | "title": "End value", 23 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value", 24 | "deprecated": true, 25 | "type": "array", 26 | "items": { 27 | "$ref": "#/$defs/values/bezier" 28 | }, 29 | "minItems": 1, 30 | "maxItems": 1 31 | } 32 | } 33 | } 34 | ], 35 | "required": ["s"] 36 | } 37 | -------------------------------------------------------------------------------- /schema/properties/bezier-property.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Bezier Property", 5 | "description": "An animatable property that holds a Bezier shape", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/properties/property" 9 | } 10 | ], 11 | "oneOf": [ 12 | { 13 | "$comment": "Not animated", 14 | "properties": { 15 | "ix": { 16 | "title": "Property Index", 17 | "type": "integer" 18 | }, 19 | "a": { 20 | "title": "Animated", 21 | "description": "Whether the property is animated", 22 | "$ref": "#/$defs/values/int-boolean", 23 | "const": 0 24 | }, 25 | "k": { 26 | "title": "Value", 27 | "description": "Static Value", 28 | "$ref": "#/$defs/values/bezier" 29 | } 30 | } 31 | }, 32 | { 33 | "$comment": "Animated", 34 | "properties": { 35 | "ix": { 36 | "title": "Property Index", 37 | "type": "integer" 38 | }, 39 | "a": { 40 | "title": "Animated", 41 | "description": "Whether the property is animated", 42 | "$ref": "#/$defs/values/int-boolean", 43 | "const": 1 44 | }, 45 | "k": { 46 | "type": "array", 47 | "title": "Keyframes", 48 | "description": "Array of keyframes", 49 | "items": { 50 | "$ref": "#/$defs/properties/bezier-keyframe" 51 | } 52 | } 53 | } 54 | } 55 | ], 56 | "required": ["a", "k"] 57 | } 58 | -------------------------------------------------------------------------------- /schema/properties/color-keyframe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Color Keyframe", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/properties/base-keyframe" 8 | }, 9 | { 10 | "properties": { 11 | "s": { 12 | "title": "Value", 13 | "description": "Value at this keyframe.", 14 | "$ref": "#/$defs/values/color" 15 | }, 16 | "e": { 17 | "title": "End value", 18 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value", 19 | "deprecated": true, 20 | "$ref": "#/$defs/values/color" 21 | } 22 | } 23 | } 24 | ], 25 | "required": ["s"] 26 | } 27 | -------------------------------------------------------------------------------- /schema/properties/color-property.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Color Property", 5 | "description": "An animatable property that holds a Color", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/properties/property" 9 | } 10 | ], 11 | "oneOf": [ 12 | { 13 | "$comment": "Not animated", 14 | "properties": { 15 | "ix": { 16 | "title": "Property Index", 17 | "type": "integer" 18 | }, 19 | "a": { 20 | "title": "Animated", 21 | "description": "Whether the property is animated", 22 | "$ref": "#/$defs/values/int-boolean", 23 | "const": 0 24 | }, 25 | "k": { 26 | "title": "Value", 27 | "description": "Static Value", 28 | "$ref": "#/$defs/values/color" 29 | } 30 | } 31 | }, 32 | { 33 | "$comment": "Animated", 34 | "properties": { 35 | "ix": { 36 | "title": "Property Index", 37 | "type": "integer" 38 | }, 39 | "a": { 40 | "title": "Animated", 41 | "description": "Whether the property is animated", 42 | "$ref": "#/$defs/values/int-boolean", 43 | "const": 1 44 | }, 45 | "k": { 46 | "type": "array", 47 | "title": "Keyframes", 48 | "description": "Array of keyframes", 49 | "items": { 50 | "$ref": "#/$defs/properties/color-keyframe" 51 | } 52 | } 53 | } 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /schema/properties/easing-handle.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Keyframe Easing", 5 | "description": "Bezier handle for keyframe interpolation", 6 | "properties": { 7 | "x": { 8 | "title": "X", 9 | "description": "Time component:\n0 means start time of the keyframe,\n1 means time of the next keyframe.", 10 | "oneOf":[ 11 | { 12 | "type": "array", 13 | "$ref": "#/$defs/values/vector", 14 | "items": { 15 | "type": "number", 16 | "default": 0, 17 | "minimum": 0, 18 | "maximum": 1 19 | }, 20 | "minItems": 1 21 | }, 22 | { 23 | "type": "number", 24 | "default": 0, 25 | "minimum": 0, 26 | "maximum": 1 27 | } 28 | ] 29 | }, 30 | "y": { 31 | "title": "Y", 32 | "description": "Value interpolation component:\n0 means start value of the keyframe,\n1 means value at the next keyframe.", 33 | "oneOf": [ 34 | { 35 | "type": "array", 36 | "$ref": "#/$defs/values/vector", 37 | "items": { 38 | "type": "number", 39 | "default": 0 40 | }, 41 | "minItems": 1 42 | }, 43 | { 44 | "type": "number", 45 | "default": 0 46 | } 47 | ] 48 | } 49 | }, 50 | "required": ["x", "y"] 51 | } 52 | -------------------------------------------------------------------------------- /schema/properties/gradient-keyframe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Gradient Keyframe", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/properties/base-keyframe" 8 | }, 9 | { 10 | "properties": { 11 | "s": { 12 | "title": "Value", 13 | "description": "Value at this keyframe.", 14 | "$ref": "#/$defs/values/gradient" 15 | }, 16 | "e": { 17 | "title": "End value", 18 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value", 19 | "deprecated": true, 20 | "type": "array", 21 | "$ref": "#/$defs/values/gradient" 22 | } 23 | } 24 | } 25 | ], 26 | "required": ["s"] 27 | } 28 | -------------------------------------------------------------------------------- /schema/properties/gradient-property.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Gradient Property", 5 | "description": "An animatable property that holds a Gradient", 6 | "properties": { 7 | "p": { 8 | "title": "Color stop count", 9 | "type": "number" 10 | }, 11 | "k": { 12 | "title": "Gradient stops", 13 | "$ref": "#/$defs/properties/gradient-stops" 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /schema/properties/gradient-stops.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Gradient stops", 5 | "description": "Animatable vector representing the gradient stops", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/properties/property" 9 | } 10 | ], 11 | "oneOf": [ 12 | { 13 | "$comment": "Not animated", 14 | "properties": { 15 | "a": { 16 | "title": "Animated", 17 | "description": "Whether the property is animated", 18 | "$ref": "#/$defs/values/int-boolean", 19 | "const": 0 20 | }, 21 | "k": { 22 | "title": "Value", 23 | "description": "Static Value", 24 | "$ref": "#/$defs/values/gradient" 25 | } 26 | } 27 | }, 28 | { 29 | "$comment": "Animated", 30 | "properties": { 31 | "a": { 32 | "title": "Animated", 33 | "description": "Whether the property is animated", 34 | "$ref": "#/$defs/values/int-boolean", 35 | "const": 1 36 | }, 37 | "k": { 38 | "type": "array", 39 | "title": "Keyframes", 40 | "description": "Array of keyframes", 41 | "items": { 42 | "$ref": "#/$defs/properties/gradient-keyframe" 43 | } 44 | } 45 | } 46 | } 47 | ], 48 | "required": ["a", "k"] 49 | } 50 | -------------------------------------------------------------------------------- /schema/properties/position-keyframe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Position Keyframe", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/properties/vector-keyframe" 8 | }, 9 | { 10 | "properties": { 11 | "ti": { 12 | "title": "Value In Tangent", 13 | "description": "Tangent for values (eg: moving position around a curved path)", 14 | "$ref": "#/$defs/values/vector" 15 | }, 16 | "to": { 17 | "title": "Value Out Tangent", 18 | "description": "Tangent for values (eg: moving position around a curved path)", 19 | "$ref": "#/$defs/values/vector" 20 | } 21 | } 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/properties/position-property.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Position Property", 5 | "description": "An animatable property to represent a position in space", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/properties/property" 9 | }, 10 | { 11 | "properties": { 12 | "l": { 13 | "title": "Length", 14 | "description": "Number of components in the value arrays.\nIf present values will be truncated or expanded to match this length when accessed from expressions.", 15 | "type": "integer" 16 | } 17 | } 18 | } 19 | ], 20 | "oneOf": [ 21 | { 22 | "$comment": "Not animated", 23 | "properties": { 24 | "ix": { 25 | "title": "Property Index", 26 | "type": "integer" 27 | }, 28 | "a": { 29 | "title": "Animated", 30 | "description": "Whether the property is animated", 31 | "$ref": "#/$defs/values/int-boolean", 32 | "const": 0 33 | }, 34 | "k": { 35 | "title": "Value", 36 | "description": "Static Value", 37 | "$ref": "#/$defs/values/vector" 38 | } 39 | } 40 | }, 41 | { 42 | "$comment": "Animated", 43 | "properties": { 44 | "ix": { 45 | "title": "Property Index", 46 | "type": "integer" 47 | }, 48 | "a": { 49 | "title": "Animated", 50 | "description": "Whether the property is animated", 51 | "$ref": "#/$defs/values/int-boolean", 52 | "const": 1 53 | }, 54 | "k": { 55 | "type": "array", 56 | "title": "Keyframes", 57 | "description": "Array of keyframes", 58 | "items": { 59 | "$ref": "#/$defs/properties/position-keyframe" 60 | } 61 | } 62 | } 63 | } 64 | ], 65 | "required": ["a", "k"] 66 | } 67 | -------------------------------------------------------------------------------- /schema/properties/property.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "title": "Property", 4 | "properties": { 5 | "ix": { 6 | "title": "Property Index", 7 | "type": "integer" 8 | }, 9 | "x": { 10 | "title": "Expression", 11 | "type": "string" 12 | }, 13 | "sid": { 14 | "title": "Slot ID", 15 | "description": "One of the ID in the file's slots", 16 | "type": "string" 17 | }, 18 | "a": { 19 | "title": "Animated", 20 | "description": "Whether the property is animated", 21 | "$ref": "#/$defs/values/int-boolean", 22 | "default": 0 23 | } 24 | }, 25 | "if": { 26 | "required": ["sid"] 27 | }, 28 | "else": { 29 | "required": ["a", "k"] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /schema/properties/scalar-property.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Scalar Property", 5 | "description": "An animatable property that holds a float", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/properties/property" 9 | } 10 | ], 11 | "oneOf": [ 12 | { 13 | "$comment": "Not animated", 14 | "properties": { 15 | "ix": { 16 | "title": "Property Index", 17 | "type": "integer" 18 | }, 19 | "a": { 20 | "title": "Animated", 21 | "description": "Whether the property is animated", 22 | "$ref": "#/$defs/values/int-boolean", 23 | "const": 0 24 | }, 25 | "k": { 26 | "title": "Value", 27 | "description": "Static Value", 28 | "type": "number" 29 | } 30 | } 31 | }, 32 | { 33 | "$comment": "Animated", 34 | "properties": { 35 | "ix": { 36 | "title": "Property Index", 37 | "type": "integer" 38 | }, 39 | "a": { 40 | "title": "Animated", 41 | "description": "Whether the property is animated", 42 | "$ref": "#/$defs/values/int-boolean", 43 | "const": 1 44 | }, 45 | "k": { 46 | "type": "array", 47 | "title": "Keyframes", 48 | "description": "Array of keyframes", 49 | "items": { 50 | "$ref": "#/$defs/properties/vector-keyframe" 51 | } 52 | } 53 | } 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /schema/properties/split-position.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Split Position", 5 | "description": "An animatable position where x and y are definied and animated separately.", 6 | "properties": { 7 | "s": { 8 | "title": "Split", 9 | "description": "Whether the position has split values", 10 | "type": "boolean", 11 | "const": true 12 | }, 13 | "x": { 14 | "title": "X Position", 15 | "description": "X Position", 16 | "$ref": "#/$defs/properties/scalar-property" 17 | }, 18 | "y": { 19 | "title": "Y Position", 20 | "description": "Y Position", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | } 23 | }, 24 | "required": ["s", "x", "y"] 25 | } 26 | -------------------------------------------------------------------------------- /schema/properties/splittable-position-property.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Splittable Position Property", 5 | "description": "An animatable position where position values may be defined and animated separately.", 6 | "oneOf": [ 7 | { 8 | "$comment": "Grouped XY position coordinates", 9 | "$ref": "#/$defs/properties/position-property", 10 | "properties": { 11 | "s": { 12 | "title": "Split", 13 | "description": "Whether the position has split values", 14 | "type": "boolean", 15 | "const": false 16 | } 17 | } 18 | }, 19 | { 20 | "$comment": "Split XY position coordinates", 21 | "$ref": "#/$defs/properties/split-position" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/properties/vector-keyframe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Vector Keyframe", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/properties/base-keyframe" 8 | }, 9 | { 10 | "properties": { 11 | "s": { 12 | "title": "Value", 13 | "description": "Value at this keyframe.", 14 | "$ref": "#/$defs/values/vector" 15 | }, 16 | "e": { 17 | "title": "End value", 18 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value", 19 | "deprecated": true, 20 | "$ref": "#/$defs/values/vector" 21 | } 22 | } 23 | } 24 | ], 25 | "required": ["s"] 26 | } 27 | -------------------------------------------------------------------------------- /schema/properties/vector-property.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Vector Property", 5 | "description": "An animatable property that holds an array of numbers", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/properties/property" 9 | }, 10 | { 11 | "properties": { 12 | "l": { 13 | "title": "Length", 14 | "description": "Number of components in the value arrays.\nIf present values will be truncated or expanded to match this length when accessed from expressions.", 15 | "type": "integer" 16 | } 17 | } 18 | } 19 | ], 20 | "oneOf": [ 21 | { 22 | "$comment": "Not animated", 23 | "properties": { 24 | "a": { 25 | "title": "Animated", 26 | "description": "Whether the property is animated", 27 | "$ref": "#/$defs/values/int-boolean", 28 | "const": 0 29 | }, 30 | "k": { 31 | "title": "Value", 32 | "description": "Static Value", 33 | "$ref": "#/$defs/values/vector" 34 | } 35 | } 36 | }, 37 | { 38 | "$comment": "Animated", 39 | "properties": { 40 | "a": { 41 | "title": "Animated", 42 | "description": "Whether the property is animated", 43 | "$ref": "#/$defs/values/int-boolean", 44 | "const": 1 45 | }, 46 | "k": { 47 | "type": "array", 48 | "title": "Keyframes", 49 | "description": "Array of keyframes", 50 | "items": { 51 | "$ref": "#/$defs/properties/vector-keyframe" 52 | } 53 | } 54 | } 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /schema/root.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "$id": "https://lottiefiles.github.io/lottie-docs/schema/lottie.schema.json", 4 | "$ref": "#/$defs/composition/animation" 5 | } 6 | -------------------------------------------------------------------------------- /schema/shapes/all-graphic-elements.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "$comment": "List of valid shapes", 4 | "oneOf": [ 5 | {"$ref": "#/$defs/shapes/ellipse"}, 6 | {"$ref": "#/$defs/shapes/fill"}, 7 | {"$ref": "#/$defs/shapes/gradient-fill"}, 8 | {"$ref": "#/$defs/shapes/gradient-stroke"}, 9 | {"$ref": "#/$defs/shapes/group"}, 10 | {"$ref": "#/$defs/shapes/merge"}, 11 | {"$ref": "#/$defs/shapes/no-style"}, 12 | {"$ref": "#/$defs/shapes/offset-path"}, 13 | {"$ref": "#/$defs/shapes/path"}, 14 | {"$ref": "#/$defs/shapes/polystar"}, 15 | {"$ref": "#/$defs/shapes/pucker-bloat"}, 16 | {"$ref": "#/$defs/shapes/rectangle"}, 17 | {"$ref": "#/$defs/shapes/repeater"}, 18 | {"$ref": "#/$defs/shapes/rounded-corners"}, 19 | {"$ref": "#/$defs/shapes/stroke"}, 20 | {"$ref": "#/$defs/shapes/transform"}, 21 | {"$ref": "#/$defs/shapes/trim-path"}, 22 | {"$ref": "#/$defs/shapes/twist"}, 23 | {"$ref": "#/$defs/shapes/zig-zag"}, 24 | {"$ref": "#/$defs/shapes/unknown-shape"} 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /schema/shapes/base-gradient.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Base Gradient", 5 | "description": "Common properties for gradients", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "g": { 11 | "title": "Colors", 12 | "description": "Gradient colors", 13 | "$ref": "#/$defs/properties/gradient-property" 14 | }, 15 | "s": { 16 | "title": "Start Point", 17 | "description": "Starting point for the gradient", 18 | "$ref": "#/$defs/properties/position-property" 19 | }, 20 | "e": { 21 | "title": "End Point", 22 | "description": "End point for the gradient", 23 | "$ref": "#/$defs/properties/position-property" 24 | }, 25 | "t": { 26 | "title": "Gradient Type", 27 | "description": "Type of the gradient", 28 | "$ref": "#/$defs/constants/gradient-type" 29 | }, 30 | "h": { 31 | "title": "Highlight Length", 32 | "description": "Highlight Length, as a percentage between `s` and `e`", 33 | "$ref": "#/$defs/properties/scalar-property" 34 | }, 35 | "a": { 36 | "title": "Highlight Angle", 37 | "description": "Highlight Angle in clockwise degrees, relative to the direction from `s` to `e`", 38 | "$ref": "#/$defs/properties/scalar-property" 39 | } 40 | }, 41 | "required": [ 42 | "s", "e", "g", "t" 43 | ] 44 | } 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /schema/shapes/base-stroke.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Base Stroke", 5 | "description": "Common properties for stroke styles", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "lc": { 11 | "title": "Line Cap", 12 | "$ref": "#/$defs/constants/line-cap", 13 | "default": 2 14 | }, 15 | "lj": { 16 | "title": "Line Join", 17 | "$ref": "#/$defs/constants/line-join", 18 | "default": 2 19 | }, 20 | "ml": { 21 | "title": "Miter Limit", 22 | "type": "number", 23 | "default": 0 24 | }, 25 | "ml2": { 26 | "title": "Miter Limit", 27 | "description": "Animatable alternative to ml", 28 | "$ref": "#/$defs/properties/scalar-property" 29 | }, 30 | "w": { 31 | "title": "Width", 32 | "description": "Stroke width", 33 | "$ref": "#/$defs/properties/scalar-property" 34 | }, 35 | "d": { 36 | "title": "Dashes", 37 | "description": "Dashed line definition", 38 | "type": "array", 39 | "items": { 40 | "$ref": "#/$defs/shapes/stroke-dash" 41 | } 42 | } 43 | }, 44 | "required": ["w"] 45 | } 46 | ] 47 | } 48 | 49 | -------------------------------------------------------------------------------- /schema/shapes/ellipse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Ellipse", 5 | "description": "Ellipse shape", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/shape" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "el" 17 | }, 18 | "p": { 19 | "title": "Position", 20 | "$ref": "#/$defs/properties/position-property" 21 | }, 22 | "s": { 23 | "title": "Size", 24 | "$ref": "#/$defs/properties/vector-property" 25 | } 26 | }, 27 | "required": [ 28 | "ty", "s", "p" 29 | ] 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /schema/shapes/fill.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Fill", 5 | "description": "Solid fill color", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/shape-style" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "fl" 17 | }, 18 | "c": { 19 | "title": "Color", 20 | "$ref": "#/$defs/properties/color-property" 21 | }, 22 | "r": { 23 | "title": "Fill Rule", 24 | "$ref": "#/$defs/constants/fill-rule" 25 | } 26 | }, 27 | "required": [ 28 | "ty", "c" 29 | ] 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /schema/shapes/gradient-fill.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Gradient", 5 | "description": "Gradient fill color", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/shape-style" 9 | }, 10 | { 11 | "$ref": "#/$defs/shapes/base-gradient" 12 | }, 13 | { 14 | "type": "object", 15 | "properties": { 16 | "ty": { 17 | "title": "Shape Type", 18 | "type": "string", 19 | "const": "gf" 20 | }, 21 | "r": { 22 | "title": "Fill Rule", 23 | "$ref": "#/$defs/constants/fill-rule" 24 | } 25 | }, 26 | "required": [ 27 | "ty" 28 | ] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /schema/shapes/gradient-stroke.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Gradient Stroke", 5 | "description": "Gradient stroke", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/shape-style" 9 | }, 10 | { 11 | "$ref": "#/$defs/shapes/base-stroke" 12 | }, 13 | { 14 | "$ref": "#/$defs/shapes/base-gradient" 15 | }, 16 | { 17 | "type": "object", 18 | "properties": { 19 | "ty": { 20 | "title": "Shape Type", 21 | "type": "string", 22 | "const": "gs" 23 | } 24 | }, 25 | "required": [ 26 | "ty" 27 | ] 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /schema/shapes/graphic-element.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Graphic Element", 5 | "description": "Element used to display vector data in a shape layer", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/helpers/visual-object" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "hd": { 14 | "title": "Hidden", 15 | "description": "Whether the shape is hidden", 16 | "type": "boolean" 17 | }, 18 | "ty": { 19 | "title": "Shape Type", 20 | "type": "string" 21 | }, 22 | "bm": { 23 | "title": "Blend Mode", 24 | "$ref": "#/$defs/constants/blend-mode" 25 | }, 26 | "ix": { 27 | "title": "Property index", 28 | "description": "Index used in expressions", 29 | "type": "integer" 30 | }, 31 | "cl": { 32 | "title": "CSS Class", 33 | "description": "CSS class used by the SVG renderer", 34 | "type": "string" 35 | }, 36 | "ln": { 37 | "title": "Layer XML ID", 38 | "description": "`id` attribute used by the SVG renderer", 39 | "type": "string" 40 | } 41 | }, 42 | "required": ["ty"] 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /schema/shapes/group.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Group", 5 | "description": "Shape Element that can contain other shapes", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/graphic-element" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "gr" 17 | }, 18 | "np": { 19 | "title": "Number Of Properties", 20 | "type": "number" 21 | }, 22 | "it": { 23 | "title": "Shapes", 24 | "type": "array", 25 | "items": { 26 | "$ref": "#/$defs/shapes/all-graphic-elements" 27 | } 28 | }, 29 | "cix": { 30 | "title": "Property index", 31 | "description": "Index used in expressions", 32 | "type": "integer" 33 | } 34 | }, 35 | "required": [ 36 | "ty" 37 | ] 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /schema/shapes/merge.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Merge", 5 | "description": "Boolean operator on shapes", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/graphic-element" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "mm" 17 | }, 18 | "mm": { 19 | "title": "Merge Mode", 20 | "$ref": "#/$defs/constants/merge-mode", 21 | "default": 1 22 | } 23 | }, 24 | "required": [ 25 | "ty" 26 | ] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /schema/shapes/modifier.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Modifier", 5 | "description": "Modifiers change the bezier curves of neighbouring shapes", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/graphic-element" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /schema/shapes/no-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "No Style", 5 | "description": "Represents a style for shapes without fill or stroke", 6 | "deprecated": true, 7 | "allOf": [ 8 | { 9 | "$ref": "#/$defs/shapes/shape-style" 10 | }, 11 | { 12 | "type": "object", 13 | "properties": { 14 | "ty": { 15 | "title": "Shape Type", 16 | "type": "string", 17 | "const": "no" 18 | } 19 | }, 20 | "required": [ 21 | "ty" 22 | ] 23 | } 24 | ] 25 | } 26 | 27 | -------------------------------------------------------------------------------- /schema/shapes/offset-path.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Offset Path", 5 | "description": "Interpolates the shape with its center point and bezier tangents with the opposite direction", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/modifier" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "op" 17 | }, 18 | "a": { 19 | "title": "Amount", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | }, 22 | "lj": { 23 | "title": "Line Join", 24 | "$ref": "#/$defs/constants/line-join", 25 | "default": 2 26 | }, 27 | "ml": { 28 | "title": "Miter Limit", 29 | "$ref": "#/$defs/properties/scalar-property" 30 | } 31 | }, 32 | "required": [ 33 | "ty" 34 | ] 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /schema/shapes/path.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Path", 5 | "description": "Custom Bezier shape", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/shape" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "sh" 17 | }, 18 | "ks": { 19 | "title": "Shape", 20 | "description": "Bezier path", 21 | "$ref": "#/$defs/properties/bezier-property" 22 | } 23 | }, 24 | "required": [ 25 | "ty", "ks" 26 | ] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /schema/shapes/pucker-bloat.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Pucker Bloat", 5 | "description": "Interpolates the shape with its center point and bezier tangents with the opposite direction", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/modifier" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "pb" 17 | }, 18 | "a": { 19 | "title": "Amount", 20 | "description": "Amount as a percentage", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | } 23 | }, 24 | "required": [ 25 | "ty" 26 | ] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /schema/shapes/rectangle.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Rectangle", 5 | "description": "A simple rectangle shape", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/shape" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "rc" 17 | }, 18 | "p": { 19 | "title": "Position", 20 | "description": "Center of the rectangle", 21 | "$ref": "#/$defs/properties/position-property" 22 | }, 23 | "s": { 24 | "title": "Size", 25 | "$ref": "#/$defs/properties/vector-property" 26 | }, 27 | "r": { 28 | "title": "Rounded", 29 | "description": "Rounded corners radius", 30 | "$ref": "#/$defs/properties/scalar-property" 31 | } 32 | }, 33 | "required": [ 34 | "ty", "s", "p" 35 | ] 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /schema/shapes/repeater-transform.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Repeater Transform", 5 | "description": "Transform used by a repeater, the transform is applied to each subsequent repeated object.", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/helpers/transform" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "so": { 14 | "title": "Start Opacity", 15 | "description": "Opacity of the first repeated object.", 16 | "$ref": "#/$defs/properties/scalar-property" 17 | }, 18 | "eo": { 19 | "title": "End Opacity", 20 | "description": "Opacity of the last repeated object.", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | } 23 | }, 24 | "required": [] 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /schema/shapes/repeater.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Repeater", 5 | "description": "Duplicates previous shapes in a group", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/modifier" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "rp" 17 | }, 18 | "c": { 19 | "title": "Copies", 20 | "description": "Number of copies", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | }, 23 | "o": { 24 | "title": "Offset", 25 | "$ref": "#/$defs/properties/scalar-property" 26 | }, 27 | "m": { 28 | "title": "Composite", 29 | "description": "Stacking order", 30 | "$ref": "#/$defs/constants/composite", 31 | "default": 1 32 | }, 33 | "tr": { 34 | "title": "Transform", 35 | "description": "Transform applied to each copy", 36 | "$ref": "#/$defs/shapes/repeater-transform" 37 | } 38 | }, 39 | "required": [ 40 | "ty", "c", "tr" 41 | ] 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /schema/shapes/rounded-corners.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Rounded Corners", 5 | "description": "Rounds corners of other shapes", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/modifier" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "rd" 17 | }, 18 | "r": { 19 | "title": "Radius", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | } 22 | }, 23 | "required": [ 24 | "ty", "r" 25 | ] 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /schema/shapes/shape-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Shape Style", 5 | "description": "Describes the visual appearance (like fill and stroke) of neighbouring shapes", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/graphic-element" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "o": { 14 | "title": "Opacity", 15 | "description": "Opacity, 100 means fully opaque", 16 | "$ref": "#/$defs/properties/scalar-property" 17 | } 18 | }, 19 | "required": [ 20 | "o" 21 | ] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/shapes/shape.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Shape", 5 | "description": "Drawable shape, defines the actual shape but not the style", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/graphic-element" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "d": { 14 | "title": "Direction", 15 | "description": "Direction the shape is drawn as, mostly relevant when using trim path", 16 | "$ref": "#/$defs/constants/shape-direction" 17 | } 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /schema/shapes/stroke-dash.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Stroke Dash", 5 | "description": "An item used to described the dash pattern in a stroked path", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/helpers/visual-object" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "n": { 14 | "title": "Dash Type", 15 | "$ref": "#/$defs/constants/stroke-dash-type", 16 | "default": "d" 17 | }, 18 | "v": { 19 | "title": "Length", 20 | "description": "Length of the dash", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | } 23 | }, 24 | "required": [] 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /schema/shapes/stroke.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Stroke", 5 | "description": "Solid stroke", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/shape-style" 9 | }, 10 | { 11 | "$ref": "#/$defs/shapes/base-stroke" 12 | }, 13 | { 14 | "type": "object", 15 | "properties": { 16 | "ty": { 17 | "title": "Shape Type", 18 | "type": "string", 19 | "const": "st" 20 | }, 21 | "c": { 22 | "title": "Color", 23 | "description": "Stroke color", 24 | "$ref": "#/$defs/properties/color-property" 25 | } 26 | }, 27 | "required": [ 28 | "ty", "c" 29 | ] 30 | } 31 | ] 32 | } 33 | 34 | -------------------------------------------------------------------------------- /schema/shapes/transform.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Transform Shape", 5 | "description": "Group transform", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/graphic-element" 9 | }, 10 | { 11 | "$ref": "#/$defs/helpers/transform" 12 | }, 13 | { 14 | "type": "object", 15 | "properties": { 16 | "ty": { 17 | "title": "Shape Type", 18 | "type": "string", 19 | "const": "tr" 20 | } 21 | }, 22 | "required": [ 23 | "ty" 24 | ] 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /schema/shapes/trim-path.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Trim Path", 5 | "description": "Trims shapes into a segment", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/modifier" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "tm" 17 | }, 18 | "s": { 19 | "title": "Start", 20 | "description": "Segment start", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | }, 23 | "e": { 24 | "title": "End", 25 | "description": "Segment end", 26 | "$ref": "#/$defs/properties/scalar-property" 27 | }, 28 | "o": { 29 | "title": "Offset", 30 | "$ref": "#/$defs/properties/scalar-property" 31 | }, 32 | "m": { 33 | "title": "Multiple", 34 | "description": "How to treat multiple copies", 35 | "$ref": "#/$defs/constants/trim-multiple-shapes" 36 | } 37 | }, 38 | "required": [ 39 | "ty", "o", "s", "e" 40 | ] 41 | } 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /schema/shapes/twist.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Twist", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/shapes/modifier" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Shape Type", 14 | "type": "string", 15 | "const": "tw" 16 | }, 17 | "a": { 18 | "title": "Angle", 19 | "$ref": "#/$defs/properties/scalar-property" 20 | }, 21 | "c": { 22 | "title": "Center", 23 | "$ref": "#/$defs/properties/vector-property" 24 | } 25 | }, 26 | "required": [ 27 | "ty" 28 | ] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /schema/shapes/unknown-shape.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Unknown shape types", 5 | "description": "Unknown shape types. Types not defined by the specification are still allowed.", 6 | "properties": { 7 | "ty": { 8 | "not": { 9 | "$comment": "enum list is dynamically generated", 10 | "enum": [] 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /schema/shapes/zig-zag.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Zig Zag", 5 | "description": "Changes the edges of affected shapes into a series of peaks and valleys of uniform size", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/shapes/modifier" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Shape Type", 15 | "type": "string", 16 | "const": "zz" 17 | }, 18 | "r": { 19 | "title": "Frequency", 20 | "description": "Number of ridges per segment", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | }, 23 | "s": { 24 | "title": "Amplitude", 25 | "description": "Distance between peaks and troughs", 26 | "$ref": "#/$defs/properties/scalar-property" 27 | }, 28 | "pt": { 29 | "title": "Point Type", 30 | "description": "Point type (1 = corner, 2 = smooth)", 31 | "$ref": "#/$defs/properties/scalar-property" 32 | } 33 | }, 34 | "required": [ 35 | "ty" 36 | ] 37 | } 38 | ] 39 | } 40 | 41 | -------------------------------------------------------------------------------- /schema/styles/all-layer-styles.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "oneOf": [ 4 | {"$ref": "#/$defs/styles/bevel-emboss-style"}, 5 | {"$ref": "#/$defs/styles/color-overlay-style"}, 6 | {"$ref": "#/$defs/styles/drop-shadow-style"}, 7 | {"$ref": "#/$defs/styles/gradient-overlay-style"}, 8 | {"$ref": "#/$defs/styles/inner-glow-style"}, 9 | {"$ref": "#/$defs/styles/inner-shadow-style"}, 10 | {"$ref": "#/$defs/styles/outer-glow-style"}, 11 | {"$ref": "#/$defs/styles/satin-style"}, 12 | {"$ref": "#/$defs/styles/stroke-style"} 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /schema/styles/color-overlay-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Color Overlay", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/styles/layer-style" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer Type", 15 | "type": "integer", 16 | "const": 7 17 | }, 18 | "bm": { 19 | "title": "Blend Mode", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | }, 22 | "c": { 23 | "title": "Color", 24 | "$ref": "#/$defs/properties/color-property" 25 | }, 26 | "so": { 27 | "title": "Opacity", 28 | "$ref": "#/$defs/properties/scalar-property" 29 | } 30 | }, 31 | "required": ["ty"] 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /schema/styles/drop-shadow-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Drop Shadow", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/styles/layer-style" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer Type", 15 | "type": "integer", 16 | "const": 1 17 | }, 18 | "c": { 19 | "title": "Color", 20 | "$ref": "#/$defs/properties/color-property" 21 | }, 22 | "o": { 23 | "title": "Opacity", 24 | "$ref": "#/$defs/properties/scalar-property" 25 | }, 26 | "a": { 27 | "title": "Angle", 28 | "description": "Local light angle", 29 | "$ref": "#/$defs/properties/scalar-property" 30 | }, 31 | "s": { 32 | "title": "Size", 33 | "description": "Blur size", 34 | "$ref": "#/$defs/properties/scalar-property" 35 | }, 36 | "d": { 37 | "title": "Distance", 38 | "$ref": "#/$defs/properties/scalar-property" 39 | }, 40 | "ch": { 41 | "title": "Choke Spread", 42 | "$ref": "#/$defs/properties/scalar-property" 43 | }, 44 | "bm": { 45 | "title": "Blend Mode", 46 | "$ref": "#/$defs/properties/scalar-property" 47 | }, 48 | "no": { 49 | "title": "Noise", 50 | "$ref": "#/$defs/properties/scalar-property" 51 | }, 52 | "lc": { 53 | "title": "Layer Conceal", 54 | "description": "Layer knowck out drop shadow", 55 | "$ref": "#/$defs/properties/scalar-property" 56 | } 57 | }, 58 | "required": ["ty"] 59 | } 60 | ] 61 | } 62 | -------------------------------------------------------------------------------- /schema/styles/gradient-overlay-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Gradient Overlay", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/styles/layer-style" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer Type", 15 | "type": "integer", 16 | "const": 8 17 | }, 18 | "bm": { 19 | "title": "Blend Mode", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | }, 22 | "o": { 23 | "title": "Opacity", 24 | "$ref": "#/$defs/properties/scalar-property" 25 | }, 26 | "gf": { 27 | "title": "Gradient", 28 | "$ref": "#/$defs/properties/gradient-property" 29 | }, 30 | "gs": { 31 | "title": "Smoothness", 32 | "$ref": "#/$defs/properties/scalar-property" 33 | }, 34 | "a": { 35 | "title": "Angle", 36 | "$ref": "#/$defs/properties/scalar-property" 37 | }, 38 | "gt": { 39 | "title": "Gradient Type", 40 | "$ref": "#/$defs/constants/gradient-type" 41 | }, 42 | "re": { 43 | "title": "Reverse", 44 | "$ref": "#/$defs/properties/scalar-property" 45 | }, 46 | "al": { 47 | "title": "Align", 48 | "description": "Align with layer", 49 | "$ref": "#/$defs/properties/scalar-property" 50 | }, 51 | "s": { 52 | "title": "Scale", 53 | "$ref": "#/$defs/properties/scalar-property" 54 | }, 55 | "of": { 56 | "title": "Offset", 57 | "$ref": "#/$defs/properties/scalar-property" 58 | } 59 | }, 60 | "required": ["ty"] 61 | } 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /schema/styles/inner-glow-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Inner Glow", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/styles/layer-style" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer Type", 15 | "type": "integer", 16 | "const": 4 17 | }, 18 | "c": { 19 | "title": "Color", 20 | "$ref": "#/$defs/properties/color-property" 21 | }, 22 | "o": { 23 | "title": "Opacity", 24 | "$ref": "#/$defs/properties/scalar-property" 25 | }, 26 | "r": { 27 | "title": "Range", 28 | "$ref": "#/$defs/properties/scalar-property" 29 | }, 30 | "sr": { 31 | "title": "Source", 32 | "$ref": "#/$defs/properties/scalar-property" 33 | }, 34 | "ch": { 35 | "title": "Choke Spread", 36 | "$ref": "#/$defs/properties/scalar-property" 37 | }, 38 | "bm": { 39 | "title": "Blend Mode", 40 | "$ref": "#/$defs/properties/scalar-property" 41 | }, 42 | "no": { 43 | "title": "Noise", 44 | "$ref": "#/$defs/properties/scalar-property" 45 | }, 46 | "j": { 47 | "title": "Jitter", 48 | "$ref": "#/$defs/properties/scalar-property" 49 | } 50 | }, 51 | "required": ["ty"] 52 | } 53 | ] 54 | } 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /schema/styles/inner-shadow-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Inner Shadow", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/styles/layer-style" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer Type", 15 | "type": "integer", 16 | "const": 2 17 | }, 18 | "c": { 19 | "title": "Color", 20 | "$ref": "#/$defs/properties/color-property" 21 | }, 22 | "o": { 23 | "title": "Opacity", 24 | "$ref": "#/$defs/properties/scalar-property" 25 | }, 26 | "a": { 27 | "title": "Angle", 28 | "description": "Local light angle", 29 | "$ref": "#/$defs/properties/scalar-property" 30 | }, 31 | "s": { 32 | "title": "Size", 33 | "description": "Blur size", 34 | "$ref": "#/$defs/properties/scalar-property" 35 | }, 36 | "d": { 37 | "title": "Distance", 38 | "$ref": "#/$defs/properties/scalar-property" 39 | }, 40 | "ch": { 41 | "title": "Choke Spread", 42 | "$ref": "#/$defs/properties/scalar-property" 43 | }, 44 | "bm": { 45 | "title": "Blend Mode", 46 | "$ref": "#/$defs/properties/scalar-property" 47 | }, 48 | "no": { 49 | "title": "Noise", 50 | "$ref": "#/$defs/properties/scalar-property" 51 | } 52 | }, 53 | "required": ["ty"] 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /schema/styles/layer-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Layer Style", 5 | "description": "Style applied to a layer", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/helpers/visual-object" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Style Type", 16 | "type": "integer" 17 | } 18 | }, 19 | "required": ["ty"] 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /schema/styles/outer-glow-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Outer Glow", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/styles/layer-style" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer Type", 15 | "type": "integer", 16 | "const": 3 17 | }, 18 | "c": { 19 | "title": "Color", 20 | "$ref": "#/$defs/properties/color-property" 21 | }, 22 | "o": { 23 | "title": "Opacity", 24 | "$ref": "#/$defs/properties/scalar-property" 25 | }, 26 | "r": { 27 | "title": "Range", 28 | "$ref": "#/$defs/properties/scalar-property" 29 | }, 30 | "ch": { 31 | "title": "Choke Spread", 32 | "$ref": "#/$defs/properties/scalar-property" 33 | }, 34 | "bm": { 35 | "title": "Blend Mode", 36 | "$ref": "#/$defs/properties/scalar-property" 37 | }, 38 | "no": { 39 | "title": "Noise", 40 | "$ref": "#/$defs/properties/scalar-property" 41 | }, 42 | "j": { 43 | "title": "Jitter", 44 | "$ref": "#/$defs/properties/scalar-property" 45 | } 46 | }, 47 | "required": ["ty"] 48 | } 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /schema/styles/satin-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Satin", 5 | "allOf": [ 6 | { 7 | "$ref": "#/$defs/styles/layer-style" 8 | }, 9 | { 10 | "type": "object", 11 | "properties": { 12 | "ty": { 13 | "title": "Type", 14 | "description": "Layer Type", 15 | "type": "integer", 16 | "const": 6 17 | }, 18 | "bm": { 19 | "title": "Blend Mode", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | }, 22 | "c": { 23 | "title": "Color", 24 | "$ref": "#/$defs/properties/color-property" 25 | }, 26 | "o": { 27 | "title": "Opacity", 28 | "$ref": "#/$defs/properties/scalar-property" 29 | }, 30 | "a": { 31 | "title": "Angle", 32 | "$ref": "#/$defs/properties/scalar-property" 33 | }, 34 | "d": { 35 | "title": "Distance", 36 | "$ref": "#/$defs/properties/scalar-property" 37 | }, 38 | "s": { 39 | "title": "Size", 40 | "$ref": "#/$defs/properties/scalar-property" 41 | }, 42 | "in": { 43 | "title": "Invert", 44 | "$ref": "#/$defs/properties/scalar-property" 45 | } 46 | }, 47 | "required": ["ty"] 48 | } 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /schema/styles/stroke-style.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Layer Stroke", 5 | "description": "Stroke / frame", 6 | "allOf": [ 7 | { 8 | "$ref": "#/$defs/styles/layer-style" 9 | }, 10 | { 11 | "type": "object", 12 | "properties": { 13 | "ty": { 14 | "title": "Type", 15 | "description": "Layer Type", 16 | "type": "integer", 17 | "const": 0 18 | }, 19 | "s": { 20 | "title": "Size", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | }, 23 | "c": { 24 | "title": "Color", 25 | "$ref": "#/$defs/properties/color-property" 26 | } 27 | }, 28 | "required": ["ty"] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /schema/text/animated-text-document.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Animated Text Document", 5 | "description": "Animated property representing the text contents", 6 | "properties": { 7 | "k": { 8 | "title": "Keyframes", 9 | "type": "array", 10 | "items": { 11 | "$ref": "#/$defs/text/text-document-keyframe" 12 | } 13 | }, 14 | "x": { 15 | "title": "Expression", 16 | "type": "string" 17 | }, 18 | "sid": { 19 | "title": "Slot ID", 20 | "description": "One of the ID in the file's slots", 21 | "type": "string" 22 | } 23 | }, 24 | "required": ["k"] 25 | } 26 | -------------------------------------------------------------------------------- /schema/text/character-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Character Data", 5 | "description": "Defines character shapes", 6 | "properties": { 7 | "ch": { 8 | "title": "Character", 9 | "type": "string", 10 | "default": "" 11 | }, 12 | "fFamily": { 13 | "title": "Font Family", 14 | "type": "string", 15 | "default": "" 16 | }, 17 | "size": { 18 | "title": "Font Size", 19 | "type": "number", 20 | "default": 0 21 | }, 22 | "style": { 23 | "title": "Font Style", 24 | "type": "string", 25 | "default": "" 26 | }, 27 | "w": { 28 | "title": "Width", 29 | "type": "number", 30 | "default": 0 31 | }, 32 | "data": { 33 | "title": "Data", 34 | "oneOf": [ 35 | {"$ref": "#/$defs/text/character-shapes"}, 36 | {"$ref": "#/$defs/text/character-precomp"} 37 | ] 38 | } 39 | }, 40 | "required": ["data", "ch", "fFamily", "size", "style", "w"] 41 | } 42 | -------------------------------------------------------------------------------- /schema/text/character-precomp.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Character Precomp", 5 | "description": "Defines a character as a precomp layer", 6 | "properties": { 7 | "refId": { 8 | "title": "Reference Id", 9 | "description": "ID of the precomp as specified in the assets", 10 | "type": "string" 11 | }, 12 | "ks": { 13 | "title": "Transform", 14 | "description": "Layer transform", 15 | "$ref": "#/$defs/helpers/transform" 16 | }, 17 | "ip": { 18 | "title": "In Point", 19 | "description": "Frame when the layer becomes visible", 20 | "type": "number", 21 | "default": 0 22 | }, 23 | "op": { 24 | "title": "Out Point", 25 | "description": "Frame when the layer becomes invisible", 26 | "type": "number", 27 | "default": 99999 28 | }, 29 | "sr": { 30 | "title": "Time Stretch", 31 | "type": "number", 32 | "default": 1 33 | }, 34 | "st": { 35 | "title": "Start Time", 36 | "type": "number", 37 | "default": 0 38 | } 39 | }, 40 | "required": ["refId"] 41 | } 42 | -------------------------------------------------------------------------------- /schema/text/character-shapes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Character Shape", 5 | "description": "Defines a character as shapes", 6 | "properties": { 7 | "shapes": { 8 | "title": "Shapes", 9 | "description": "Shapes forming the character", 10 | "type": "array", 11 | "items": { 12 | "$ref": "#/$defs/shapes/all-graphic-elements" 13 | } 14 | } 15 | }, 16 | "required": ["shapes"] 17 | } 18 | -------------------------------------------------------------------------------- /schema/text/font-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Font List", 5 | "description": "List of fonts", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "list": { 11 | "title": "List", 12 | "type": "array", 13 | "items": { 14 | "$ref": "#/$defs/text/font" 15 | } 16 | } 17 | }, 18 | "required": [] 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /schema/text/font.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Font", 5 | "description": "Describes how a font with given settings should be loaded", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "ascent": { 11 | "title": "Ascent", 12 | "type": "number", 13 | "description": "Text will be moved down based on this value" 14 | }, 15 | "fFamily": { 16 | "title": "Font Family", 17 | "type": "string", 18 | "default": "sans" 19 | }, 20 | "fName": { 21 | "title": "Name", 22 | "description": "Name used by text documents to reference this font, usually it's `fFamily` followed by `fStyle`", 23 | "type": "string", 24 | "default": "sans-Regular" 25 | }, 26 | "fStyle": { 27 | "title": "Font Style", 28 | "examples": ["Regular", "Bold", "Bold Italic"], 29 | "type": "string", 30 | "default": "Regular" 31 | }, 32 | "fPath": { 33 | "title": "Path", 34 | "type": "string" 35 | }, 36 | "fWeight": { 37 | "title": "Weight", 38 | "type": "string" 39 | }, 40 | "origin": { 41 | "title": "Origin", 42 | "$ref": "#/$defs/constants/font-path-origin" 43 | }, 44 | "fClass": { 45 | "type": "string", 46 | "title": "CSS Class", 47 | "description": "CSS Class applied to text objects using this font" 48 | } 49 | }, 50 | "required": [ 51 | "fFamily", "fName", "fStyle" 52 | ] 53 | } 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /schema/text/text-alignment-options.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Text Alignment Options", 5 | "description": "", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "a": { 11 | "title": "Alignment", 12 | "description": "Group alignment", 13 | "$ref": "#/$defs/properties/vector-property" 14 | }, 15 | "g": { 16 | "title": "Grouping", 17 | "description": "Anchor point grouping", 18 | "$ref": "#/$defs/constants/text-grouping" 19 | } 20 | }, 21 | "required": [] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /schema/text/text-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Text Data", 5 | "description": "Contains all the text data and animation", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "a": { 11 | "title": "Ranges", 12 | "type": "array", 13 | "items": { 14 | "$ref": "#/$defs/text/text-range" 15 | } 16 | }, 17 | "d": { 18 | "title": "Document", 19 | "$ref": "#/$defs/text/animated-text-document" 20 | }, 21 | "m": { 22 | "title": "Alignment", 23 | "$ref": "#/$defs/text/text-alignment-options" 24 | }, 25 | "p": { 26 | "title": "Follow Path", 27 | "$ref": "#/$defs/text/text-follow-path" 28 | } 29 | }, 30 | "required": ["a", "d", "m", "p"] 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /schema/text/text-document-keyframe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Text Document Keyframe", 5 | "description": "A keyframe containing a text document", 6 | "properties": { 7 | "s": { 8 | "title": "Start", 9 | "$ref": "#/$defs/text/text-document" 10 | }, 11 | "t": { 12 | "title": "Time", 13 | "type": "number", 14 | "default": 0 15 | } 16 | }, 17 | "required": ["s", "t"] 18 | } 19 | -------------------------------------------------------------------------------- /schema/text/text-follow-path.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Text Follow Path", 5 | "description": "Uses the path described by a layer mask to put the text on said path.", 6 | "allOf": [ 7 | { 8 | "type": "object", 9 | "properties": { 10 | "m": { 11 | "title": "Mask", 12 | "type": "integer", 13 | "description": "Index of the mask to use" 14 | }, 15 | "f": { 16 | "title": "First Margin", 17 | "$ref": "#/$defs/properties/scalar-property" 18 | }, 19 | "l": { 20 | "title": "Last Margin", 21 | "$ref": "#/$defs/properties/scalar-property" 22 | }, 23 | "r": { 24 | "title": "Reverse Path", 25 | "$ref": "#/$defs/properties/scalar-property" 26 | }, 27 | "a": { 28 | "title": "Force Alignment", 29 | "$ref": "#/$defs/properties/scalar-property" 30 | }, 31 | "p": { 32 | "title": "Perpendicular To Path", 33 | "$ref": "#/$defs/properties/scalar-property" 34 | } 35 | }, 36 | "required": [] 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /schema/text/text-range-selector.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Text Range Selector", 5 | "properties": { 6 | "t": { 7 | "title": "Expressible", 8 | "$ref": "#/$defs/values/int-boolean" 9 | }, 10 | "xe": { 11 | "title": "Max Ease", 12 | "$ref": "#/$defs/properties/scalar-property" 13 | }, 14 | "ne": { 15 | "title": "Min Ease", 16 | "$ref": "#/$defs/properties/scalar-property" 17 | }, 18 | "a": { 19 | "title": "Max Amount", 20 | "$ref": "#/$defs/properties/scalar-property" 21 | }, 22 | "b": { 23 | "title": "Based On", 24 | "$ref": "#/$defs/constants/text-based" 25 | }, 26 | "rn": { 27 | "title": "Randomize", 28 | "$ref": "#/$defs/values/int-boolean" 29 | }, 30 | "sh": { 31 | "title": "Shape", 32 | "$ref": "#/$defs/constants/text-shape" 33 | }, 34 | "o": { 35 | "title": "Offset", 36 | "$ref": "#/$defs/properties/scalar-property" 37 | }, 38 | "r": { 39 | "title": "Range Units", 40 | "$ref": "#/$defs/constants/text-range-units" 41 | }, 42 | "sm": { 43 | "title": "Selector Smoothness", 44 | "$ref": "#/$defs/properties/scalar-property" 45 | }, 46 | "s": { 47 | "title": "Start", 48 | "$ref": "#/$defs/properties/scalar-property" 49 | }, 50 | "e": { 51 | "title": "End", 52 | "$ref": "#/$defs/properties/scalar-property" 53 | } 54 | }, 55 | "required": ["t", "a", "b", "sh"] 56 | } 57 | -------------------------------------------------------------------------------- /schema/text/text-range.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Text Range", 5 | "description": "Range of text with custom animations and style", 6 | "properties": { 7 | "nm": { 8 | "title": "Name", 9 | "type": "string" 10 | }, 11 | "s": { 12 | "title": "Selector", 13 | "$ref": "#/$defs/text/text-range-selector" 14 | }, 15 | "a": { 16 | "title": "Style", 17 | "$ref": "#/$defs/text/text-style" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /schema/values/bezier.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "object", 4 | "title": "Bezier", 5 | "description": "Cubic polybezier", 6 | "properties": { 7 | "c": { 8 | "title": "Closed", 9 | "type": "boolean", 10 | "default": false 11 | }, 12 | "i": { 13 | "title": "In Tangents", 14 | "type": "array", 15 | "description": "Array of points, each point is an array of coordinates.\nThese points are along the `in` tangents relative to the corresponding `v`.", 16 | "items": { 17 | "$ref": "#/$defs/values/vector", 18 | "default": [] 19 | } 20 | }, 21 | "o": { 22 | "title": "Out Tangents", 23 | "type": "array", 24 | "description": "Array of points, each point is an array of coordinates.\nThese points are along the `out` tangents relative to the corresponding `v`.", 25 | "items": { 26 | "$ref": "#/$defs/values/vector", 27 | "default": [] 28 | } 29 | }, 30 | "v": { 31 | "title": "Vertices", 32 | "description": "Array of points, each point is an array of coordinates.\nThese points are along the bezier path", 33 | "type": "array", 34 | "items": { 35 | "$ref": "#/$defs/values/vector", 36 | "default": [] 37 | } 38 | } 39 | }, 40 | "required": ["i", "v", "o"] 41 | } 42 | -------------------------------------------------------------------------------- /schema/values/color.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "array", 4 | "title": "Color", 5 | "description": "Color as a [r, g, b] array with values in [0, 1]", 6 | "items": { 7 | "type": "number", 8 | "minimum": 0, 9 | "maximum": 1 10 | }, 11 | "minItems": 3, 12 | "maxItems": 4 13 | } 14 | -------------------------------------------------------------------------------- /schema/values/data-url.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "string", 4 | "title": "Data URL", 5 | "description": "An embedded data object", 6 | "pattern": "^data:([\\w/]+)(;base64)?,(.+)$" 7 | } 8 | -------------------------------------------------------------------------------- /schema/values/gradient.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "array", 4 | "title": "Gradient", 5 | "description": "A flat list of color stops followed by optional transparency stops. A color stop is [offset, red, green, blue]. A transparency stop is [offset, transparency]. All values are between 0 and 1", 6 | "items": { 7 | "type": "number", 8 | "minimum": 0, 9 | "maximum": 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /schema/values/hexcolor.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "string", 4 | "title": "Hex Color", 5 | "description": "Color value in hexadecimal format, with two digits per component ('#RRGGBB')", 6 | "pattern": "^#([a-fA-F0-9]{6})$", 7 | "examples": ["#FF00AA"] 8 | } 9 | -------------------------------------------------------------------------------- /schema/values/int-boolean.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "integer", 4 | "title": "Integer Boolean", 5 | "description": "Represents boolean values as an integer. `0` is false, `1` is true.", 6 | "default": 0, 7 | "examples": [0], 8 | "enum": [0, 1], 9 | "oneOf": [ 10 | { 11 | "title": "True", 12 | "const": 1 13 | }, 14 | { 15 | "title": "False", 16 | "const": 0 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /schema/values/vector.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "type": "array", 4 | "title": "Vector", 5 | "description": "An array of numbers", 6 | "items": { 7 | "type": "number" 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /theme/fonts/Karla-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Karla-Bold.ttf -------------------------------------------------------------------------------- /theme/fonts/Karla-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Karla-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /theme/fonts/Karla-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Karla-VariableFont_wght.ttf -------------------------------------------------------------------------------- /theme/fonts/Type-Ø-Tones-Arboria-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Type-Ø-Tones-Arboria-Black.otf -------------------------------------------------------------------------------- /theme/fonts/Type-Ø-Tones-Arboria-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Type-Ø-Tones-Arboria-Bold.otf -------------------------------------------------------------------------------- /theme/img/chevron-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /theme/img/chevron-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /theme/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/img/favicon.ico -------------------------------------------------------------------------------- /theme/img/icon-right-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /theme/img/icon-search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /theme/img/lf-logo-mini.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /theme/img/logo-lottie.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /theme/img/logo-svelte.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /theme/img/vue-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /theme/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | 4 | {% block extrahead %} 5 | {{ super() }} 6 | 7 | {% if config.theme.colorscheme %} 8 | 9 | {% else %} 10 | 11 | {% endif %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | {% if config.theme.hljs_languages %} 19 | {%- for lang in config.theme.hljs_languages %} 20 | 21 | {%- endfor %} 22 | {% endif %} 23 | 24 | 25 | 26 | 27 | 28 | {% endblock %} 29 | 30 | {% block footer %} 31 | 32 | {% endblock %} 33 | 34 | {% block scripts %} 35 | 36 | {{ super() }} 37 | 45 | 46 | {% endblock %} 47 | 48 | -------------------------------------------------------------------------------- /theme/toc.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/expression_convert.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import json 3 | 4 | 5 | def variable(name=None, type=None, description=None, default=None, notes=None): 6 | params = dict(locals()) 7 | ret = {} 8 | for k, v in params.items(): 9 | if v is not None: 10 | ret[k] = v 11 | return ret 12 | 13 | 14 | name = ret = description = None 15 | params = [] 16 | 17 | for line in sys.stdin: 18 | try: 19 | chunks = [c.strip() for c in line.split(":")] 20 | if chunks[0] == "name": 21 | name = chunks[1] 22 | elif chunks[0] == "return": 23 | ret = chunks[1:] 24 | elif chunks[0] == "param": 25 | params.append(chunks[1:]) 26 | elif chunks[0] == "description": 27 | description = chunks[1] 28 | elif name: 29 | fdef = {} 30 | if description: 31 | fdef["description"] = description 32 | if params: 33 | fdef["params"] = [variable(*p) for p in params] 34 | if ret: 35 | fdef["return"] = variable(None, *ret) 36 | 37 | data = json.dumps({name: fdef}, indent=4) 38 | print(data[1:-2]+",") 39 | 40 | name = ret = description = None 41 | params = [] 42 | except Exception as e: 43 | print(e) 44 | 45 | 46 | --------------------------------------------------------------------------------